값의 종류 즉, 자료형을 바꾸는 개념
컴퓨터 안에서 값을 처리하는 규칙
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는 양방향 형변환이 가능
번외) (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)
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 |