새소식

JAVA

자바 기초 : 타입 변환(자동 타입 변환과 강제 타입 변환)

  • -

핵심개념

  • 타입변환 : 데이터 타입을 다른 데이터 타입으로 변환하는 것. 변수 값을 다른 타입변쉥 저장할 때 타입변환이 발생할 수 있다. 타입변환은 크게 자동타입변환과 강제타입변환이 있다. 
    ex) byte -> int   /   int -> byte
    ex) byte a = 1; int b = a;

  • 자동타입변환 : 컴파일러에 의해 자동으로 타입이 변환 되는 것. 값의 허용범위가 작은 타입이 허용 범위가 큰 타입으로 저장될 때 자동으로 발생된다.
    허용범위 크기순 : byte < short < int < long < float < double

    char타입의 경우 int타입으로 자동변환되면서 유니코드 값이 int 타입에 저장된다.
    하지만 byte 타입은 char 타입보다 허용범위가 작음에도 불구하고 char 타입으로 자동변환될 수 없는데, 그 이유는  byte 타입은 음수를 포함하는 반면, char 타입은 음수를 표함하지 않기 때문이다.
    ex) char charValue = 'A' 
          int intValue = charValue; //65가 저장됨.
    ex)byte byteValue = 65;
         char charValue = byteValue //불가능. char은 음수를 포함하지 않기때문에 byte로 변한되지 않음.
public static void main(String[] args) {
   byte byteValue = 20;
   int intValue = byteValue; //byte->int
   System.out.println("intValue : "+intValue);

   char charValue = '다';
   intValue = charValue; //char->int
   System.out.println("'다'의 유니코드 : "+intValue);

   intValue = 50;
   long longValue = intValue; //int->long
   System.out.println("longValue : "+longValue);

   longValue = 100;
   float floatValue = intValue; //long->float
   System.out.println("floatValue : "+floatValue);

   floatValue = 100.5F;
   double doubleValue = floatValue; //float->double
   System.out.println("doubleValue : "+doubleValue);

   double total = 10.0f + 5.0;
   System.out.println("total : "+total); //float->double
}
실행결과 :
intValue : 20
'다'의 유니코드 : 45796
longValue : 50
floatValue : 50.0
doubleValue : 100.5
total : 15.0
public static void main(String[] args) {
   byte x = 10;
   byte y = 25;
/byte result = x + y 컴파일 에러. x,y int타입으로 자동변환
   int result1 = x + y;
   System.out.println(result1);
   
//연산에서 byte,short, char타입은 int타입으로 타동변환되어 연산된다.
}
실행결과 : 35
public static void main(String[] args) {
   byte result1 = 10 + 20;
   System.out.println(result1);

   byte byteValue1 = 10;
   byte byteValue2 = 20;
/*byte byteValue3 = byteValue1 + byteValue2
  byte->int로 자동변환되어 계산되기 때문에 컴파일 에러 */
   int intValue1 = byteValue1 + byteValue2;
   System.out.println(intValue1);

/*result1처럼 리터럴 연산은 자동타입변환에서 제외,
  intValue1같은 변수연산은 자동타입변환되어 연산*/

   char charValue1 = 'A';//65
   char charValue2 = 1;
/*char charValue3 = charValue1 + charValue2;
  char->int로 자동변환되어 계산되기 때문에 컴파일 에러*/
   int intValue2 = charValue1 + charValue2;
   System.out.println("유니코드 = "+intValue2);
   System.out.println("출력문자 = "+ (char)intValue2);

   int intValue3 = 10;
   int intValue4 = intValue3/4;
   System.out.println(intValue4);

   int intValue5 = 10;
/*int intValue6 = 10/4.0* 컴파일 에러. double로 자동형 변환 후 계산*/
   double doubleValue5 = intValue5/4.0;
   System.out.println(doubleValue5);

   int x = 1;
   int y = 2;
   double result = (double)x/y;
   System.out.println(result);
   double result2 = x/y; //int형으로(0) 계산된 값이 double(0.0)형으로 저장됨
   System.out.println(result2);
}
실행결과 :
30
30
유니코드 = 66
출력문자 = B
2
2.5
0.5
0.0

 

  • 강제타입변환 : 사용자가 타입 캐스트 연산자를 사용하여 강제로 타입을 변한하는 것. 큰 허용 범위의 타입을 작은 허용범위의 타입으로 변환할 때 발생한다.
    변환방법 -> (변환할타입) 변환할데이터 -> 자바에서는 이를 타입 캐스트 연산자 또는 캐스팅 연산자라고 함.
public static void main(String[] args) {
   int intValue = 44032;
   char charValue = (char) intValue; //int->char(문자로 출력가능)
   System.out.println(charValue);

   long longValue = 500;
   intValue = (int) longValue; //long->int
   System.out.println(intValue);

   double doubleValue = 3.14;
   intValue = (int)doubleValue//long->int
   System.out.println(intValue);
}
실행결과 : 

500
3

 

  • 연산에서 문자열의 자동타입변환 : 피연산자 중 하나가 문자열일 경우 다른 피여난자도 문자열로 자동 변환되어 문자열 결합 연상을 수행함.
    ex) "문자열" + 숫자 -> "문자열" + "숫자 -> "문자열 숫자"
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);
//()안 연산을 먼저 수행하고 "10"+10 연산 수행
}

 

  • 연산에서 문자열의 강제타입변환 : 캐스팅 문자가 아닌 API(Application Programming Interface)를 이용해서 강제로 변환한다.
    ex)문자열을 정수 및 실수 타입으로 변환해서 숫자연산을 하는경우, 정수 및 실수를 문자열로 변환해서 연산하는 경우
    Integer.parseInt() : 문자열을 정수 int 타입으로 변환
    Double.parseDouble() : 문자열을 실수 double 타입으로 변환
    Boolean.parseBoolean() : 문자열을 Boolean 타입으로 변환
public static void main(String[] args) {
//문자열을 기본 타입으로 강제 타입 변환
//int i = "10"; 컴파일 에러
   int i = Integer.parseInt("10"); //문자열->int
   double j = Double.parseDouble("3.14"); //문자열->double
   boolean k = Boolean.parseBoolean("true"); //문자열->Boolean
   System.out.println("i : "+ i);
   System.out.println("j : "+ j);
   System.out.println("k : "+ k);

//기본타입을 문자열로 강제 타입 변환
//String str1 = 10; 컴파일 에러
   String str1 = String.valueOf(10); //정수->문자열
   String str2 = String.valueOf(3.14); //실수->문자열
   String str3 = String.valueOf(true); //boolean->문자열
   System.out.println(str1);
   System.out.println(str2);
   System.out.println(str3);
}
실행결과 :
i : 10
j : 3.14
k : true
10
3.14
true
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.