티스토리 뷰
형 변환
프로모션(promotion) - 더 큰 자료형으로의 자동 변환 / 정보의 손실이 없다.
디모션(demotion) - 더 작은 자료형으로의 변환(명시) / 정보의 손실이 발생할 가능성이 있기 때문에 이것을 고려 해야 한다.
ex1)
/*
* 자바의 기본 베이스가 유니 코드이기 때문에 한글로 클래스 이름을 만들거나.
* 변수를 지정할수 있다.그러나 실무에서는 영어로 작성 하기 바라고..테스트 용으로
* 사용하기 바란다.
*/
package javasouc;
public class 자동형변환 {
public static void main(String[] args){
// promotion 확대변화
//byte형 변수 (1byte : 127까지 기억) a는 10을 가지며, b는 7을 가진다.
byte a = 10, b = 7 ;
int c;
c = a + b; //오류 컴파일러에 의해서 8bit + 8bit 의 결과값 c를 16bit로
// 자동 승격 시켜 버린다.
// 자바에서는 32비트 이하 연산을 할 때 자료형들 끼리 연산을 수행한다.
// 그런 행동으로 인해 32비트 이하의 자료형들이 32비트(4byte) 체제로 승격이
// 일어 난다. 우린 이것을 promotion이라 한다. 교재 72페이지
System.out.println("c의 값을 int형으로 바까야한다."+c);
//Demotion 축소변화 - 데이터의 손실이 발생 하지 않는 범위 내에서 사용할 것
byte d = (byte)(a + b);
// 승격이 일어난 것
// a + b를 더한 결과를 byte로 바뀌어야 하기 때문에 () 묶어 줘야한다.
// byte d = (byte)a + b; // 이것 또한 오류다
// a와 b를 더한 후에 byte로 변환을 해야 하는데 이것은 더하기 연산을
// 수행하기 전에 a만 byte 변환하므로 (byte)로 명시한것이 무의미하다.
// 이렇게 int형의 결과를 자원의 손실을 피하여 강등 시키는 것을
// Demotion이라 한다.
System.out.println("byte 타입의 d의 캐스팅 결과값 : "+d);
}
}
ex2)
/*
*shot(2byte)형 변수 c를 선언하면서 변수 a와 b를 더하기 연산 하여
* 결과를 c에 대입한다. 하지만 여기서 자료들끼리의 연산만 일어나는 것이 아니라
* 자료형끼리도 연산이 일어난다는 것에 주목해야 한다. 자료형 a + b가 아닌 단순히
* 20이라는 상수값을 short형 c변수에 대입한다면 문제가 없겠지만 자바에서는 32bit 미만
* ,즉 short형과 byte형끼리 연산이 일어나면 32bit로 승격(promotion)시켜 결과값이
* 그냥 값이 아닌 32bit int형이 된다는 것을 잊지 말자.
*/
package javasouc;
public class OperEx2 {
public static void main(String[] args){
short a,b;
a = b = 10;
// short c = (short)(a + b);
short c = a + b;
System.out.println("c 의 값 :" + c);
/*
*ErrMSG
* E:\Source\JavaSouc\src\javasouc\OperEx2.java:18: possible loss of precision
* found : int
* required: short
* short c = a + b;
* 1 error
*/
}
}