자바는 문자와 문자열을 다르게 인식!
"" 큰따움표로 감싼것을 문자열로 인식
문자열은 char 타입에 저장할 수 없음 strong 타입에 저장해야함(strong 타입은 자바의 기본타입에는 속하지 않음, 참조타입)
char타입에는 작은따움표''로 감싼 하나의 문자 리터럴만 저장가능
이스케이프
자바는 실수리터럴을 기본적으로 double 타입으로 해석
float var = 3.14;(X)
3.14를 기본적으로 double타입으로 인식해서 float타입으로 저장하고자 하면 컴파일 오류 발생
float타입으로 저장할려고 하면, f를 리터럴 앞이나 뒤에 넣어줘야함, 대소문자 상관없음
float var = 3.14f; (O) 🙆♀️
논리타입
정수를 지정할수 있는 타입으로는 byte, short, int, long이 있음
자바 타입변환
자동 타입변환, 강제 타입변환, 결합 연산(문자열 경우)
타입 변환이란 데이터 타입을 다른 데이터 타입으로 변환하는 것!
ex) byte 타입 -> int 타입
int 타입 -> byte 타입
double 타입 -> int 타입
String 타입 -> int 타입
변수 선언 당시 다른 타입의 변수에 저장할대 타입 변환이 발생할수 있다.
byte a = 10; byte 타입 변수 a에 10을 저장
int b = a; byte 타입 변수 a에 저장된 10이 int 타입값으로 변환됨
자동 타입 변환(promotion): 값의 허용 범위가 작은 타입이 큰 타입으로 저장될 경우
기본 타입의 허용 범위 순: byte < short < int < logn < float < double
char 타입의 경우도 int 타입으로 자동변환되며, 유니코드 값이 int 타입에 저장
char charValue = 'A';
int intValue = charValue A의 유니코드 65가 저장됨, char는 2byte, int는 4byte
byte byteValue = 65;
char charValue = byteValue (X) 컴파일에러 발생 why? byte 타입의 허용범위는 -128~127까지임, 그러나 char 타입의
혀용범위는 0~65000까지임 따라서 음수부분에서 문제발생
(음수를 가질 수 있는 타입으 char타입으로 변환할려고 하면 컴파일에러 발생)
강제 타입 변환(casting): 큰 허용 범위 타입을 작을 허용 범위 타입으로 강제로 나누어 한 조각만 저장
() 캐스팅 연산자 사용 : 괄호 안이 나누는 단위
int intValue = 10;
byte byteValue = (byte) intValue;
int타입을 char타입으로 강제 변환, 문자 출력 위함
int intValue = 65;
char charValue = (char) intValue;
System.out.println(charValue). 'A' 가 출력
실수 타입을 정수 타입으로 강제변환, 소수점 이하 부분 버려지고 정수부분만 저장, 자주 쓰임!
double doubleValue = 3.14;
int intValue = (int) doubleValue; intValue는 정수 부분인 3만 저장
https://youtu.be/PCfKL5eb4Bc
정수 타입 변수가 산술 연산식( + , - , * , %)에서 피연산자로 사용되는 경우
byte, char, short 타입 변수는 int 타입으로 자동 변환
byte x = 10;
byte y = 20;
byte result = x + y; (X) 컴파일 에러 발생
int result = x + y; (O)
특별한 경우가 아니라면 정수 연산에 사용하는 변수는 int 타입으로 선언하는 것이 효과적
피 연산자 중 하나가 long 타입이면 다른 피연산자는 long 타입으로 자동변환
피 연산자 중 하나가 double 타입이면 다른 피연산자는 double 타입으로 자동변환
다른 타입 연산이 필요한 경우 먼저 강제 변환한 뒤 연산 수행
int intValue = 10;
double doubleValue = 5,5;
int result = intValue + (int) doubleValue; result에 15가 저장됨
실수 리터럴 연산
double result = 1.5 + 2.3;
float result = 1.5 + 2.3; (X)
float result = 1.5f + 2.3f; (O)
정수 연산의 결과를 실수로 저장할때 주의할 점
정수 연산의 결과는 정수!!
int x = 1;
int y = 2;
double result = x / y; 1/2는 0.5지만, 정수 연산의 결과는 정수니까 앞의 값 0만 나오고, double타입에 저장했으니 0.0값 도출됨
0.5의 결과값을 얻을려면(실수 결과를 얻을려면) 실수 연산으로의 변환 필요
1) x를 강제변환
int x = 1;
int y = 2;
double result = (double) x / y; x를 double타입으로 강제 변환해서 1.0 으로 바꿔주고 실수에 산수연산을 그 결과가 y도 2.0으로 바뀜
따라서 0.5값 도출
2) y를 강제변환
int x = 1;
int y = 2;
double result = x / (double) y; 원리가 위랑 똑같음
3) x,y 모두 강제 변환
int x = 1;
int y = 2;
double result = (double) x / (double) y;
https://youtu.be/gJqfge-beGc
+ 연산에서의 문자열 자동 타입변환
+ 연산
피연산자가 모두 숫자일 경우 덧셈 연산
피연산자 중 하나가 문자일경우 나머지 피연산자도 문자열로 자동 변환되고 문자열 결합 연산
+연산은 앞에서부터 순차적으로 수행
먼저 수행된 연산이 결합 연산인 경우 이후 모든 연산이 결한 연산이 됨
문자열을 기본타입으로 강제 변환
String -> int
String str = "30000";
int value = Integer.parseInt(str);
String -> double
String str = "12.345";
double value = Double.parseDouble(str);
parseByte, parseShort, parseInt, parseLong, parseFloat, parseDouble, parseBoolean
문자열이 숫자 외 요소를 포함할 경우 숫자 타입 변환 시도할 경우 숫자형식 예의 발생
String sta = "1a";
int value = Integer.parseInt(str); NumberFormatException 발생
String.valueOf() 메소드 사용하여 기본타입을 문자열로 변환
String.valueOf(3); "3"
String str = "" + 3; 빈문자열 더해주면 숫자는 문자열로 변환해서 "3" 이 나옴
'TIL > myself' 카테고리의 다른 글
TIL(Today I Learned) 20220421 자바 배열, 자바 열거 타입 (0) | 2022.04.21 |
---|---|
TIL(Today I Learned) 20220420 자바 참조타입과 참조 변수 (0) | 2022.04.20 |
TIL(Today I Learned) 20220419 자바 조건문과 반복문 (0) | 2022.04.19 |
TIL(Today I Learned) 20220418 자바 연산자과 연산식 (0) | 2022.04.18 |
TIL(Today I Learned) 20220417 자바 변수와 시스템 입출력 (0) | 2022.04.17 |