본문 바로가기
Programming/JAVA(eclipse)

java 2일차 정리 _ 03. 형변환

by yoon9i 2024. 3. 8.

8. 데이터형 변환
1) 개념
- 한번 선언된 데이터형은 언제든지 변경이 가능하다.
- 큰박스에 작은 박스는 저장이 가능하고
역은 저장이 불가능하다.

2) 형변환 종류
(1) 자동형변환( 묵시적, promotion, up-casting )

가. byte(1byte) -> short(2byte) -> int(4byte) -> long 
-> float -> double

나. char( 문자형 ) -> int( 정수형 )
ex) int n = 'A'; // 가능

다. 정수형중에서 int 보다 작은 타입의 연산결과는 기본값인 int 로 반환된다.

라. 작은 데이터형과 큰 데이터의 연산결과는 큰 데이터형으로 
반환된다.
예) 정수형하고 실수형하고 연산결과는 실수형으로 반환된다.

마. 문자열+비문자열(문자열) ==> 문자열로 반환

(2) 강제적형변환( 명시적, type casting, down-casting, 
일반적으로 의미하는 형변환 )

- 작은타입 = 큰타입; // -> 에러발생
- 작은타입 = (작은타입) 큰타입; // 형변환 연산자 : ( 타입 )

3) 현재는 기본형만 형변환 실습을 하였음.
하지만 참조형( 클래스 ) 도 형변환이 가능하다. 
결론, 자바의 모든 데이터( 기본형, 참조형 )는 형변환이 가능하다.( * )

 

묵시적형변환과 관련된 코드들이고

package exam03_형변환;

public class CastTest1_묵시적형변환 {

	public static void main(String[] args) {
		
		// 1. byte(1byte) -> short(2byte) -> int(4byte)
		// -> long(8) -> float(4) -> double
		// '=' 을 기준으로 " 큰타입 = 작은타입; "
		byte b = 10;
		short b2 = b; // byte 타입의 b 가 short 타입으로 자동변경
		int b3 = b2;
		long b4 = b3;
		float b5 = b4;
		double b6 = b5;
		
		// 단, 역은 불가능 ( 작은타입 = 큰타입 x)
//		int x = b6;
		
		// 2. char( 문자형 ) -> int ( 정수형 )
		char c = 'A';
		int c2 = 'A';
		int c3 = 'a';
		System.out.println(c2); // 대문자 A 의 정수값(아스키코드값) : 65
		System.out.println(c3); // 소문자 a 의 정수값(아스키코드값) : 97
		
		int c4 = 'A' + 1; // char는 산술연산이 가능하다.
		System.out.println(c4);
		
		// 3. 정수형에서 int 보다 작은 타입의 연산결과는 기본값인 int 로 반환된다.
		short s = 10;
		short s2 = 20;
//		short s3 = s + s2; // s + s2의 결과는 40인데 40의 데이터는 정수형의 기본인 int 다.
		int s3 = s + s2;
		
		// 4. 작은 데이터형과 큰 데이터의 연산결과는 큰 데이터형으로 
		//    반환된다.
		
		System.out.println(4 + 5.0); // 정수 + 실수 = 실수
		int k = 4;
		float k2 = 5.0F;
		double k3 = k+k2; // float k3 = k+k2; 단, k3는 정수가 되면 안된다.
		System.out.println(k3);
		
		// 5. 문자열+비문자열(문자열) ==> 지정된 값이 연결되어 문자열로 반환
		System.out.println(10+" "+20);
		
		String name = "홍길동";
		int age = 20;
		System.out.println("이름: " + name); // 이름: 홍길동
		System.out.println("이름: " + name + " 나이: " + age); // 이름: 홍길동 나이: 20
	}

}

 

아래는 명시적형변환과 관련된 코드들이다.

package exam03_형변환;

public class CastTest2_명시적형변환 {

	public static void main(String[] args) {
		
		// 강제 형변환
		
		int n = 10;
//		short n2 = n; // 작은타입 = 큰타입; x
		short n2 = (short)n; // 작은타입 = (작은타입) 큰타입; o
		
		short s = 10;
		short s2 = 20;
		short s3 = (short)(s + s2);
		
		
	}

}