<타입변환>
-타입 변환 : 데이터 타입을 다른 데이터 타입으로 변환하는 것을 말함
ex) byte a = 10; // byte 타입 변수 a에 10을 저장
int b = a; //byte 타입 변수 a에 저장된 10을 int 타입 변수 b에 복사해서 저장
-> 원래 10은 byte타입의 값이었으나,복사해서 저장할 때 int 타입의 값으로 변환된 것 -> 이걸 타입변환이라고 함
<자동 타입변환>
기본 타입 허용 범위 크기순
byte<short<int<long<float<double
프로그램 실행 도중에 자동으로 타입 변환이 일어나는 것을 의미
허용 범위가 작은 타입이 허용범위가 큰 타 입으로 저장 될 때 발생함
ex) 큰 허용범위 타입 = 작은 허용범위 타입
byte byteValue = 10;
int intValue = byteValue; // 자동 타입 변환됨
정수타입이 실수 타입으로 저장 된 경우 무조건 자동 타입변환 일어남
실수타입은 정수 타입보다 허용범위가 더 크기 때문
ex) long longValue = 5000000000L;
float floatValue = longValue; //5.0E9f로 저장됨
double doubleValue = longValue; // 5.0E9로 저장됨
*char 타입의 경우 int타입으로 자동 타입변환되면 유니코드 값이 int 타입에 저장됨
ex) char charValue = ‘A’;
int intValue = charValue; //65가 저장됨
*char타입보다 허용 범위가 작은 byte타입은 char타입으로 자동 타입변환 될 수 x
왜냐면? char타입의 허용범위는 음수 포함x / byte타입은 음수를 포함
ex) byte byteValue = 65;
char charValue = byteValue; <- 컴파일 에러 발생됨
package chapter02;
public class promotionexample {
public static void main(String[] args) {
//자동 타입변환
byte bytevalue = 10;
int intValue = bytevalue;
System.out.println("intvalue:"+intValue);
char charValue = '가';
intValue = charValue;
System.out.println("가의 유니코드:"+ intValue);
intValue = 50;
long longValue = intValue;
System.out.println("longValue:"+longValue);
longValue = 100;
float floatValue = longValue;
System.out.println("floatValue:" + floatValue);
floatValue = 100.5f;
double doubleValue = floatValue;
System.out.println("doubleValue:"+ doubleValue);
}
}
<강제 타입변환>
큰 허용 범위 타입은 -> 작은 허용 범위 타입으로 자동 타입변환 될 수 x
큰 허용범위 타입을 작은 허용 범위 타입으로 강제로 나눠서 저장 하는 것을 강제 타입변환 (캐스팅 :casting) 이라고 함
강제타입 변환은 () 사용 , 괄호 안에 들어가는 타입은 나누는 단위
작은 허용 범위 타입 = (작은 허용 범위 타입)큰 허용 범위 타입
*int타입은 byte타입보다 더 큰 허용 범위를 가지기 때문에 자동 변환 x
(char)캐스팅 연산자 사용하여 char타입으로 강제 변환 -> char타입으로 강제변환 하는 이유는 = 문자를 출력할 수 있기 때문
ex) int intValue = 65;
char charValue = (char)intValue;
System.out.println(charValue); // A가 출력됨
실수 타입(float, double)은 정수타입 (byte,short,int,long)으로 자동 변환되지 x 때문에 강제 타입변환을 사용해야함
이경우 소수점 이하 부분은 버려지고 정수 부분만 저장됨
ex) double doubleValue = 3.14;
int intValue = (int) doubleValue; // intValue 는 정수 부분인 3만 저장
package chapter02;
public class CastingExample {
public static void main(String[] args) {
int intValue = 44032;
char charValue = (char)intValue;
System.out.println(charValue);
long longValue = 500;
intValue = (int)longValue;
System.out.println(intValue);
double doubleValue = 3.14;
intValue = (int)doubleValue;
System.out.println(intValue);
}
}
<연산식에서 자동타입변환>
package chapter02;
public class Operationpromotionexample {
public static void main(String[] args) {
byte byteValue1 = 10;
byte byteValue2 = 20;
//byte byteValue3 = byteValue1 + byteValue2;
int intValue1 = byteValue1 + byteValue2;
System.out.println(intValue1);
char charValue1 = 'A';
char charValue2 = 1;
//char charValue3 = charValue1 + charValue2;
int intValue2 = charValue1 + charValue2;
System.out.println("유니코드=" + intValue2);
System.out.println("출력문자="+(char)intValue2);
<연산에서의 문자열 자동 타입변환>
자바에서 + 연산자는 두가지 기능
1.피연산자가 모두 숫자일 경우 덧셈 연산 수행
*숫자+숫자 -> 덧셈연산 -> 숫자
int value = 3+7; -> int value = 10;
2.피연산자 중 하나가 문자열일 경우 나머지
피연산자도 문자열로 자동 변환되어 -> 문자열 결합 연산 수행
*”문자열” + 숫자 -> “문자열” +”숫자”->결합연산 ->”문자열숫자”
string str = “3”+7; -> string str= “3+7”; -> string str = “37”
*숫자+”문자열”-> “숫자”+”문자열”->결합연산->”숫자문자열”
string str= 3+”7”; -> string str= “3”+”7”; -> string str= “37”
------> 어느한쪽이 문자로 되어있으면 문자열로 됨
연산식에서 +연산자가 연속으로 나오면
순차적으로 +연산 수행
먼저 수행된 덧셈연산 결과를 가지고 그다음 +연산 수행
int value= 1+2+3; -> int value =3+3; -> int value= 6;
string str = 1+2+”3”; -> string str = 3+”3”; -> String str “33”
String str= 1+”2”+3; -> String str=”12”+3 -> “123”
String str=”1”+2+3; -> String str”12”+3 -> String str= “123”;
–앞에서 부터 순차적으로 +하지않고 우선연산 원하면 해당부분()
String str= “1”+(2+3); -> String str=”1” +5 -> String str= 15;
<문자열 결합 연산>
public static void main(String[] args) {
//숫자 연산
int value = 10 + 2 + 8;
System.out.println("value:"+value);
//문자열 결합 연산
String str1 = 10 +2+"8";
System.out.println("str1:"+str1);
String str2 = 10+"2"+8;
System.out.println("str2:"+ str2);
String str3 = "10"+2+8;
System.out.println("str3:"+ str3);
String str4 = "10"+ (2+8);
System.out.println("str4:"+ str4);
}
}
<문자열 기본타입 강제 타입 변환>
public static void main(String[] args) {
int value1 = Integer.parseInt("10");
double value2 = Double.parseDouble("3.14");
boolean value3 = Boolean.parseBoolean("true");
System.out.println("value1:"+ value1);
System.out.println("value2:"+ value2);
System.out.println("value3:"+ value3);
String str1 = String.valueOf(10);
String str2 = String.valueOf(3.14);
String str3 = String.valueOf(true);
System.out.println("str1:" + str1);
System.out.println("str2:" + str2);
System.out.println("str3:" + str3);
}
}