06
07
728x90

예제)

package sec03.exam02_casting;

public class CheckValueBeforeCasting 
{

	public static void main(String[] args) 
	{
		int i = 128;
		
		//127 대신에 i>Byte.MAX_VALUE -128 대신에 i<Byte.MIN_VALUE 사용해도 됨
		if(i>127 || i<-128) //i가 127보다 크거나, i가 -128보다 작으면 (-128~127의 범위를 벗어나면)
		{
			System.out.println("byte타입으로 변환할 수 없습니다." + "\n" + "값을 다시 확인해주세요.");
		}
		else
		{
			byte b = (byte) i;
			
			System.out.println(b);
		}
	}
}

출력 결과

i에 125의 값을 저장한 경우 : 

출력 결과


int 값을 실수로 강제 타입 변환시 되도록이면 float가 아닌 double로 변환하여 정밀도 손실을 피하는게 좋음.
float는 23비트로 int의 32비트보다 작기 때문에 int 값이 손실 될 수 있지만, double은 52비트로 32비트보다 커서 int의 값이 그대로 보존된다.

예제)

package sec03.exam03_accuracy;

public class FromIntToFloat 
{

	public static void main(String[] args) 
	{
		int num1 = 123456780;
		int num2 = 123456780;
		
		float num3 = num2; //int를 float로 변환
		System.out.println(num3);
		num2 = (int)num3; //float를 int로 변환
		System.out.println(num2);
		
		int result = num1 - num2;
		System.out.println(result);
	}
}

출력 결과

package sec03.exam03_accuracy;

public class FromIntToDouble 
{

	public static void main(String[] args) 
	{
		int num1 = 123456780;
		int num2 = 123456780;
		
		double num3 = num2; //int를 double 으로 변환
		System.out.println(num3);
		num2 = (int)num3; //double을 int로 변환
		System.out.println(num2);
		
		int result = num1 - num2;
		System.out.println(result);
	}
}

출력 결과

 


연산식에서 자동 타입 변환

연산은 같은 타입의 피연산자간에만 수행

서로 다른 타입의 피연산자는 같은 타입으로 변환됨 ( 두 피연산자 중 크기가 큰 타입으로 자동 변환 )

 

int 이하의 타입 연산

자바는 정수 연산일 경우 int 타입을 기본으로 한다. 그 이유는 피연산자를 4byte 단위로 저장하기 때문에 크기가 4byte보다 작은타입 (byte, char, short)은 4byte인 int 타입으로 변환된 후 연산이 수행된다. 따라서 연산의 결과도 int 타입이 된다.

 long 타입 연산

만약 피연산자 중 하나가 long 타입이라면 다른 피연산자도 long 타입으로 자동 타입 변환되고 연산의 결과는 long 타입이 된다.

실수 리터럴 및 double 연산

float 타입과 float 타입을 연산하면 연산의 결과는 float 타입으로 나오지만, 피연산자 중에 실수 리터럴이나 double타입이 있다면 다른 피연산자도 double 타입으로 자동 타입 변환되어 연산되므로 결과는 double 타입으로 산출된다.

리터럴? 소스 코드의 고정된 값을 대표하는 용어

예제)

package sec03.exam04_operation;

public class OperationPromotionExample 
{
	public static void main(String[] args) 
	{
		byte byteValue1 = 10;
		byte byteValue2 = 20;
		
		//byte byteValue3 = byteValue1 + byteValue2;
		
		int intValue1 = byteValue1 + byteValue2;
		System.out.println(intValue1);
		
		char charValue1 = 'A';
		char charValue2 = 1;
		
		//char charValue3 = charValue1 + charValue2;
		
		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;
		double doubleValue = intValue5 / 4.0; //정수 나누기 실수는 실수이므로 double에 저장
		System.out.println(doubleValue);
	}
}

 

출력결과

 

728x90

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

[JAVA] 단항 연산자  (0) 2021.06.08
[JAVA] 연산자와 연산식  (0) 2021.06.08
[JAVA] 데이터 타입  (0) 2021.06.07
[JAVA] 변수  (0) 2021.06.07
[JAVA] 자바 개발 환경 구축  (0) 2021.06.04
COMMENT