SyntaxHighlighter.all(); [자바 Ch2] 기본형변수의 형변환(Casting) :: 게을러지고 싶어 부지런한 개발자

<자바의정석 3판, Ch2 내용 중> 

 

변수의 타입은 크게 기본형 & 참조형로 나눔 

기본형(Primitive type)

실제 값(data)을 저장   

<총 8개>

-문자형(char)

-정수형(byte, short, int, long)

-실수형(float, double)

-논리형(boolean) 

참조형(Reference type) 객체의 주소를 저장 . 8개의 기본형 제외한 나머지

 

기본형에서 boolean을 제외한 나머지 타입들은 서로 형변환이 가능 

-하지만 기본형 <-> 참조형은 서로 형변환 할 수 없음 (참조형의 형변환은 자바-Ch7에 설명) 

변환 방법:   (타입)피연산자

 

정수형에서 실수형으로 변환:

  • 실수형이 정수형보다 훨씬 큰 저장범위 갖기에 정수형-> 실수형 변환에 별 무리가 X
  • 한 가지 주의할 점: float는 약 7자리의 정밀도만을 제공하므로, 8자리 이상의 정수값을 실수형으로 변환할 때는 float이 아닌 약 15자리의 정밀도를 갖는 double로 형변환해야 오차 발생 안함                                            

Ex.

int형 12345678를 float으로 변환  → 12345679.0

int형 12345678를 double로 변환 → 12345678.0

 

실수형을 정수형으로 변환 

  • 실수형의 소수점 이하 값은 버려짐(자료의 손실 발생 가능) 
  • 반올림 발생 X  (ex. 실수 1.666 를 int로 형변환하면, 1이 됨) 

 

자동 형변환

: 서로 다른 타입의 변순간의 연산은 형변환을 하는 것이 원칙이지만,

값의 범위가 작은 타입에서 큰 타입으로의 형변환은 생략 가능 

(컴파일러가 생략된 형변환을 자동적으로 해줌) 

 

ex) int i = 3; 

     double d = 1.0 + i;    //double d = 1.0 + (double)i; 에서 형변환 생략됨 

 

 

 

 

기본형타입 간 형변환 예시 

class Main {
	
	public static void main(String[] args) {
		int i = 12345678; 
		float f = (float)i;  //int를 float으로 형변환
		int i2 = (int)f; 	 //float를 다시 int로 형변환
		
		double d = (double)i; //int를 double로 형변환
		int i3 = (int)d;      //double를 다시 int로  형변환 	
		System.out.println(i);   //출력:  12345678
		System.out.println(f);   //출력: 12345679.0
		System.out.println(i2);  //출력: 12345679
	
		System.out.println(d);	 //출력: 12345678.0
		System.out.println(i3);  //출력: 1234568
	}
}

 

+ Recent posts