*JAVA*

[java] 변수 - 형변환(Type Casting)

깐부로부터 2021. 10. 19. 22:54

값의 종류 즉, 자료형을 바꾸는 개념

컴퓨터 안에서 값을 처리하는 규칙

1. =(대입연산자)를 기준으로 왼쪽, 오른쪽이 같은 자료형이여야 한다.

   같은 자료형에 해당되는 리터럴 값만 대입이 가능하다.

   자료형이 다를 경우에는? 값을 바꿔서 대입해야 한다

 

2. 같은 자료형들끼리만 연산이 가능하다.만들어줘야 한다.

   다른 자료형끼리 연산을 하고싶다면 ?

   둘 중 하나는 “형변환”을 해서 나머지 하나와 동일하게 만들어줘야 한다.

 

3. 연산의 결과도 같은 자료형이여야 한다.

   ex) 1+1=2(정수), 1.1+1.1=2.2(실수)

   [표현법] ( 바꿀 자료형 ) 값

    ﹂형변환 연산자, cast 연산자

 


형변환의 종류

-자동 형변환(promotion)

  • 자동으로 형변환이 진행
  • 내가 형변환을 할 필요가 X
  • 작은 크기의 자료형 => 큰 크기의 자료형

1. int (4byte, 정수) -> double(8byte, 실수)

 

2. int(4byte, 정수) -> long(8byte, 정수)

 

 

3. 특이케이스 long(8byte, 정수) -> float(4byte, 실수)

정수가 실수로 담길 때 큰 사이즈의 정수가 작은 사이즈의 실수에 대입이 가능!

왜 ?? 4byte의 float형이 long형보다 담을 수 있는 값의 범위가 더 크기 때문이다.

 

 

4. char(2byte) <-> int(byte) : char랑 int는 양방향 형변환이 가능

//둘다 b가 출력된다. (아스키코드표 참조)

 

 

번외) (char)2 ≠ '2'

System.out.println('김'); //김
System.out.println((int)'김'); //44608 (아스키코드표)
System.out.println('김' + (char)2); //44610
//연산하면 둘다 int형으로 형변환이 일어나서 '김'=44608, (char)2=2
	int 2가 char로 형변환 됐지만 연산하기 위하여 다시 int로 형변환됨.
	숫자 2의 문자형은 STX(Start of Text) 제어문자로 자바가 표현할 수 없는 문자이다.

System.out.println('김' + '2'); // 44658
// 44608 + 50 = 44608

※그러므로 (char)2 와 '2'는 같지 않다!!!!

 

 

 

 

5. 특이케이스 byte, short 간의 연산

결과값이 int형 ⇒ CPU가 값을 처리하는 기본크기 int형의 크기(4byte)

//3

byte b3 = 128;// Error, byte의 표현범위가  [-128 ~ 127]이므로 오버플로우다.

byte b3 = (byte)128;// OK, (byte)를 붙여서 형변환 하면 가능하지만 소실이 잃어난다.

-강제형변환 (명시적 형변환)

: 큰 바이트 -> 작은 바이트

(바꿀 자료형) 값

1. double(8byte) -> float(4byte)

float f1 = 4.0f;
		
double d2 = 8.0;
		
float f2 = (float)d2;

 

2. double(8byte) -> int(4byte)

double d3 = 10.89;
int i3 = (int)d3;
System.out.println(i3);// 0.89 소수점 뒷 부분이 절삭 되었다. => 데이터가 손실

int iNum = 10;
double dNum= 8.89;
System.out.println(iNum + dNum);//18.89 int가 표현범위가 더 넓은 double형으로 형변환 되어서
																	10.0 + 8.89 = 18.89

'*JAVA*' 카테고리의 다른 글

[java] Scanner  (0) 2021.10.19
[java] 출력문  (0) 2021.10.19
[java] 변수 - 자료형  (0) 2021.10.19
[java] 변수(Variable)  (0) 2021.10.19
[java] 메소드(Method)  (0) 2021.10.19