신입개발자

타입변환 본문

프로그래밍 언어/자바

타입변환

dks_a 2022. 1. 3. 15:12

- 리터럴 literal 값 : 숫자만 있는 우변의 값

- 리터럴 값의 기본 : 정수는 int, 실수는 double
- 좌변과 우변이 다를 때 대 <- 소는 컴파일러가 자동변환(프로모션, 업캐스팅, 자동캐스팅)해주고

소 <- 대는 컴파일러가 해주지 못하고 개발자가 값손실을 감수하고 강제변환(강제캐스팅, 다운캐스팅)해야 에러가 없음 예)int i = (int)3.14; 

package pk06;

public class 타입변환 {

	public static void main(String[] args) {
				
		byte b = 10; 
        // OK, int보다 작은 타입(byte/short)은 우변의 리터럴 값이 byte/short의 허용범위내라면 자동캐스팅해줌
//		byte b = (byte)10; // byte<-(byte)int 강제캐스팅이 원칙, 잘안씀
		System.out.println("b = "+b); // 10
//		b = 128; 
		//에러, 우변 리터럴에 byte허용값 초과(단, b=127일 떄 b+=1 문장은 컴파일 에러 없음)
		b = (byte)128; // 억지
		System.out.println("b = "+b); // -128, 컴파일은 된다 하더라도 오버플로우를 피할 순 없음
		System.out.println();
		
		short s = 10; // OK, 이유는 byte와 동일
//		short s = (short)10;  // short <- (short)int  강제 캐스팅이 원칙, 잘안씀
		System.out.println("s = "+s); //10
		System.out.println();
		
//		int i = 3.9; // 오류, int <- double		
		int i = (int)3.9; // 오류, int <- double
		System.out.println("i = "+ i); //3, 버림
		
		long l = 10; // OK, long <- int 
		System.out.println("l = "+l); //10
		l = 2000000000;
		System.out.println("l = "+l); // 20억
//		l = 3000000000; // 오류, 우변에서 int 범위를 초과하는 리터럴값을 기재하면서 에러발생
		l = 3000000000L; 
        // OK, l/L = long형을 캐스팅하는 방법(대문자 추천) ------> long형의 우변 리터럴이 20억 이상이면 L접미사
		System.out.println("l = "+l); // 30억
		System.out.println();
		
		float f = 10; // OK, float <-- int
		System.out.println("f = "+f); // 10.0
//		f = 3.9; // 오류, float <- double
		f = 3.9F; 
        // OK, f/F(대문자 추천)  ------> float형의 우변 리터럴에 항상 F접미사 (차라리 double 추천)
		System.out.println("f = "+f); // 3.9
		System.out.println();
		
		double d =10; // OK, double <-- int
		System.out.println("d = "+d); // 10.0
		d = 3.9; // OK, double <-- double
		System.out.println("d = "+d); // 3.9
		
		
		
	}

}

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

연산자1  (0) 2022.01.07
연산에서의 타입 변환  (0) 2022.01.07
자료형  (0) 2022.01.03
변수의 유효범위  (0) 2021.12.31
명명규칙  (0) 2021.12.30
Comments