
example)
byte a = 10; // byte 타입 변수 a에 10을 저장
int b = a; // byte 타입 변수 a에 저장된 10을 int 타입 변수 b에 복사해서 저장
-> 원래 10은 byte타입의 값이었지만, 저장할 때 int 타입의 값으로 변환
: 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 저장될 때 발생, 프로그램 실행 도중에 자동으로 일어남.
🍒 기본 타입 허용 범위 크기순으로 정리
byte<short<int<long<float<double
byte 타입은 char 타입으로 자동 타입 변환될 수 없음 -> char 타입은 음수를 포함하지 않지만 byte 타입은 음수를 포함하기 때문char 타입의 경우 int 타입으로 자동 변환되면 유니코드 값이 int 타입에 저장됩니다.byte byteValue = 10;
int intValue = byteValue; // int 타입으로 자동 타입 변환
: 큰 허용 범위 타입은 작은 허용 범위의 타입으로 자동 형변환 되지 않기 때문에 큰 허용 범위 타입을 작은 허용 범위 타입으로 강제로 나눠서 저장해야 한다.
int intValue = 10;
byte byteValue = (byte) intValue; // 강제 타입 변환
-> int 타입은 byte 타입보다 큰 허용 범위를 가져서 (byte)캐스팅 연산자를 사용해서 byte 타입으로 강제 변환
int intValue = 10;
char charValue = (char) intValue;
Systemout.println(charValue);
-> int 타입은 char 타입보다 큰 허용 범위를 가지기 때문에 (char) 캐스팅 연산자를 사용해서 char 타입으로 강제 변환
: 정수 타입의 변수가 산술 연산식에서 피연산자로 사용되면 int 타입보다 작은 byte, short 타입의 변수는 int 타입으로 자동 타입 변환되어 연산을 수행함
byte x = 10;
byte y = 20;
// byte result = x + y; 로 출력하면 컴파일 에러 발생
// -> byte 변수 x, y가 피연산자로 사용되면 int 타입으로 변환되어 연산되므로
// 연산 결과를 byte 변수에 저장할 수 없음(int 변수에 저장해야 함)
int result = x + y; // int result에 값을 저장해야 올바르게 출력됨
int x = 10;
int y = 20;
int result = x + y; // 처음부터 타입을 int로 설정해두면 타입 변환이 줄어들어 코드가 깔끔해진다.
TIP : int 타입보다 허용 범위가 큰 long 타입이 피연산자로 사용되면 다른 피연산자는 무조건 long 타입으로 변환하고 연산을 수행하기 때문에 연산 결과를 long 타입 변수에 저장해야 함
: 피연산자 중 하나가 double 타입이라면 다른 피연산자도 double 타입으로 자동 변환됨
double result = 1.2f + 3.4; // 1.2f는 float 타입, 3.4는 double 타입
-> 1.2f가 1.2 (double 타입)로 변환되어 연산 수행됨
int intValue = 10;
double doubleValue = 1.2;
double result = intValue + doubleValue;
-> int 타입의 intValue 가 double 타입으로 변환되어 연산을 수행해서 result에 11.2의 값이 저장된다.
int intValue = 10;
double doubleValue = 1.2;
int result = intValue + (int) doubleValue;
-> 꼭 int 타입으로 연산해야할 때, double 타입에 (int)를 사용하여 int 타입으로 강제 변환(Casting)하여 연산 수행
int x = 1;
int y = 2;
double result = (double)x / y;
System.out.println(result);
-> 원래 수학적으로는 1 / 2 = 0.5인데, 변수 x와 y가 int 타입으로 선언되어 있기 때문에 0으로 출력된다.
0.5로 출력하려면 실수형으로 형변환을 해주어야 하는데, double result = (double) x / y;를 입력하여 double 타입으로 형변환 해주어 0.5를 출력할 수 있다.
: + 연산자를 사용할 때 피연산자가 모두 숫자일 경우는 덧셈을 실행하지만 피연산자 중 하나가 문자열일 경우 나머지 피연산자도 자동으로 문자열로 변환됨
int value 1 + 2;
int value = 3;
// 숫자 + 숫자 = 숫자
String str = 1 + "2";
String str = "12";
//숫자 + 문자열 = 문자열
TIP : 우선 연산하고 싶은 부분이 있는 경우 ( ) 괄호로 감싸주면 된다.
String -> byte String str = "1";
byte value = Byte.parseByte(str);
String -> shortString str = "10';
short value = Short.parseShort(str);
String -> intString str = "10";
int value = Integer.parseInt(str);
String -> longString str = "100000";
long value = Long.parseLong(str);
String -> floatString str = "12.345";
float value = Float.parseFloat(str);
String -> doubleString str = "12.345";
double value = Double.parseDouble(str);
String -> booleanString str = "true";
boolean value = Boolean.parseBoolean(str);
String str = String.valueOf(기본 타입 값);
위의 메소드에 기본 타입 값을 입력해 주면 문자열로 형변환 됨