신입개발자

연산에서의 타입 변환 본문

프로그래밍 언어/자바

연산에서의 타입 변환

dks_a 2022. 1. 7. 01:03
public class 연산에서의타입변환 {
	public static void main(String[] args) {
		byte b = 10; // 우변 리터럴은 byte 허용범위내이므로 byte <- (byte)int 로 자동변환됨
		short s = 20; // 우변 리터럴은 short 허용범위내이므로 short <- (short)int 로 자동변환됨
		// byte b2 = b + s; // 에러
	}
}

[ byte b2 = b + s; 가 에러 나는 이유 ]

컴파일 당시에는 b, s값을 아직 모르는 상태이므로 우변의 덧셈결과를 int로 가정한다.

왜냐하면 메모리 처리의 효율성을 위해 자료형의 최소단위를 int로 한정하기 때문이다.  즉, byte <- int인 상태이다.

package pk07;

public class 연산에서의타입변환 {
	public static void main(String[] args) {
		
		// byte b2 = (byte)b + (byte)s; // 에러, 우변 전체에서 여전히 에러
		// byte b2 = (byte)(b + s); // 가능하지만 억지 
		int b2 = b+s; // int <- int 추천
		System.out.println("b2 = "+ b2); // 30
		
		int i = 7 + 3; // int <- int
		System.out.println("i = " +i); //10
		i = 7/3; // int <- int
		System.out.println("i = " +i); //2 , 몫구하기
		// i = 7 + 3.9; 
		// int <- double, 컴파일러는 (double)7 + 3.9 처럼 자료를 잃지않는 방향으로 자동변환
		// i = 7 + (int)3.9; // 10, 가능하기는 하지만 값손실 각오해야함 
		i = (int)(7 + 3.9); // 10, 상동
		double i2 = 7 + 3.9; // double <- double 추천
		System.out.println("i2 = " +i2); //10.9
		
		float f = 7 / 3; // float <- int 
		System.out.println("f = "+f); //2.0, 정수값을 실수화했을 뿐 여전히 몫
		// f = 7. / 3; // 오류, float형의 우변 리터럴은 무조건 F접미사
		f = 7.F / 3; //OK, float <- float  우변의 한쪽값만 실수화 시켜도 됨
		System.out.println("f = "+f); //2.3333333
		
		double d = 7./3;
		System.out.println("d = "+d); //2.3333333333333335		
	}
	
}

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

연산자2  (0) 2022.05.01
연산자1  (0) 2022.01.07
타입변환  (0) 2022.01.03
자료형  (0) 2022.01.03
변수의 유효범위  (0) 2021.12.31
Comments