형변환 : 값의 자료형을 바꾸는 것 

 *컴퓨터에서의 값처리 규칙
  1. 대입 연산자를 기준으로 왼쪽과 오른쪽은 같은 자료형이여야된다. 
   -> 즉, 같은 자료형에 해당하는 값만 대입이 가능하다. 혹시라도 다른 자료형 값을 대입하고자 한다면 형변환이 필수 
 
   2.같은 자료형끼리만 연산이 가능 / 연산 결과도 같은 자료형으로 나옴  
    값 - 값 
   
 * 형변환의 종류 
  1.자동 형변환 : 직접 형변환할 필요 없이 자동으로 바뀜
  2.강제(명시적) 형변환 : 직접 형변환 시켜줘야함  
 * [표현법] (바꿀자료형)값
 

//자동형변환
- 자료형이 다른 두 값 간의 연산(대입,계산 등) 시 자동으로 값의 범위가 작은 자료형이 큰 자료형으로 변환되어 처리
   

//1. int(4byte) --> double(8byte) 
  int i1 =  12; 
  double d1 = /*(double)*/i1; // 12-->자동형변환--> 12.0 
 
  System.out.println("d1: " + d1);
 
  //-------------------------------
  int i2 = 12; 
  double d2 = 3.3;
 
  double result = /*(double)*/i2 + d2; // 12.0 + 3.3 = 15.3
  System.out.println("result : "+ result);
 
 //2. int(4byte) --> long(8byte)
 
  int i3 = 1000;
  long l3 = /*(long)*/i3;
 
 //3. float(4byte) --> double(8byte)
 
  float f4 = 1.0f;
  double d4 = /*(double)*/f4;


  ==========특이 케이스============
  

 //특이 1. long(8byte) --> float(4byte)
  // float이 실수형이기때문에 long형보다 표현 가능 수의 범위가 더 크기 때문 
  float f5 = /*(float)*/l3;
 
  //특이 2. char(2byte) <-> int(4byte)
  int num = 'A';
  char ch = 53240; // 단 char에 음수값 저장 불가 ->  0~65535
  // 각 문자들 마다 고유한 숫자가 지정되어 있기 때문에 쌍방향으로 형변환 가능
 
  System.out.println("num: "+ num); //A == 65
  System.out.println("ch: "+ ch); // a == 97


 

//강제형변환
:큰 크기의 자료형을 작은 크기의 자료형으로 강제로 바꾸는 것 
 

  //1. double (8byte) --> float(4byte)
  double d1 = 4.0;
  float f1 = (float)d1;
 
  //2. double(8byte) --> int(4byte)
  int iNum = 10;
  double dNum = 5.89;
 
  // int result = iNum + dNum; // int-> double형 자동형변환 되어 10.0+5.89 = 15.89 
                               //연산결과인 double형이 int형에 대입 불가 
 
  //해결방법 1. 연산결과를 int형으로 강제형변환 후 대입 
  int result1 = (int)(iNum + dNum); //15.89-> (int)15.89 => 15
  System.out.println("result1 : " + result1); 
 
  //해결방법 2. 덧셈 연산시 double형 값만을 int형으로 강제형변환
  int result2 = iNum + (int)dNum; //10+5 =>15
  System.out.println("result2 : "+ result2);
 
  //실수값을 정수값으로 강제 형변환시 소수점 아래 부분은 버림 -> 데이터 손실이 발생될 수 있음
 
  //해결방법 3. 연산결과를 그에 맞는 자료형의 변수에 대입 
  double result3 = iNum + dNum;
  System.out.println("result3: "+ result3);


 
 

'JAVA' 카테고리의 다른 글

4_2. 제어문 _ 조건문 switch  (0) 2022.10.18
4_1. 제어문(Control) _ 조건문 if  (0) 2022.10.18
2_3 Printf  (0) 2022.10.18
3. 연산자  (0) 2022.10.17
2_2 Scanner  (0) 2022.10.14
복사했습니다!