[Java] 자동형변환(1)
카테고리: Java
태그: coding Programming Java
자동형변환
자동형변환 규칙
- 자바에서 다른 타입끼리의 연산은 피연산자들이 모두 같은 타입인 경우 실행할 수 있다
- 즉, 같은 데이터 타입끼리만 연산을 수행할 수 있다
형변환의 종류와 규칙
- 자동형변환(묵시적 형변환) : 컴파일러가 자동으로 수행해주는 타입 변환
- 작은 자료형에서 큰자료형으로 자동 형변환 된다
- 정수는 실수로 자동 형변환이 된다
- 문자형은 int형으로 자동 형변환 된다
- 논리형은 형변환 규칙에서 제외된다
자동형변환 규칙테스트
작은 자료형에서 큰 자료형으로 자동 형변환 된다
- 작은 자료형에서 큰 자료형으로 공간만 옮기는 경우 데이터 손실이 발생하지 않기 때문에 컴파일러가 자동으로 처리해준다
byte bunm = 1;
short snum = bunm;
int inum = snum;
long lnum = inum;
int num1 = 10;
long num2 = 20;
//int result1 = num1 + num2; // 자동으로 큰 자료형인 long 타입으로 변경 후에 계산하기 때문에 int 형 변수에 값을 담을 수 없다.
long result1 = num1 + num2; // int + long 은 서로 다른 자료형이라 데이터 손실이 발생하지 않는 int > long 변환을 자동으로 수정 후 연산한다.
System.out.println("result1 : " + result1);
float fnum = 4.0f;
double dnum = fnum;
double result2 = fnum + dnum;
System.out.println("result2 : " + result2);
- 출력값
result1 : 30
result2 : 8.0
정수는 실수로 자동 형변환 된다
정수는 실수로 변경할 때 소수점 자리가 없어도 실수형태로 표현이 가능하다. 이 때 데이터 손실이 없기 때문에 자동 형변환이 가능하다
문자형은 int형으로 자동 형변환이 된다
어떤 자료형이든 boolean을 형변환해서 담을 수 없다
boolean inTrue = true;
//byte b = isTrue;
//short s = isTrue;
//int i = isTrue;
//long l = isTrue;
//char c = isTrue;
//float f = isTrue;
//double d = isTrue;
강제 형변환
- 바꾸려는 자료형으로 캐스트 연산자를 이용하여 형변환된다
ex) (바꿀 자료형) 값;
자동형변환 규칙의 반대 상황에서 강제형변환이 필요하다
강제형변환 규칙
- 큰 자료형에서 작은 자료형으로 변경 시 강제 형변환이 필요하다
- 실수를 정수로 변경 시 강제 형변환이 필요하다
- 문자형은 int 미만 크기의 변수에 저장할 때 강제 형변환이 필요하다
- 논리형은 강제 형변환 규칙에서도 제외된다
큰 자료형에서 작은 자료형으로 변경 시 강제 형변환이 필요하다
- 정수 끼리의 강제 형변환
long lnum = 8;
//int inum = lnum; //데이터 손실 가능성을 컴파일러가 알려준다.(에러남)
int inum = (int) lnum; // 변경하려는 자료형을 명시하여 강제 형변환을 해야함.
short snum = (short) inum;
double dnum = 8.0;
//float fnum = dnum;
float fnum = (float) dnum;
실수를 정수로 변경시 강제 형 변환이 필요하다
float fnum2 = 4.0f;
//long lnum2 = fnum2; //소수점 자리 이하의 데이터 손실 가능성으로 자료형의 byte같이 크더라도 불가능하다.
long lnum2 = (long) fnum2; //강제 형변환의 의미는 내가 데이터 손실을 감안할테니 형변환 해줘! 라는 의미이다.
문자형을 int 미만 크기의 변수에 저장할 때 강제 형변환이 필요하다
int num1 = 97;
int num2 = -97;
char ch2 = (char) num1;
char ch3 = (char) num2;
System.out.println("ch2 : " + ch2);
System.out.println("ch3 : " + ch3);
boolean isTrue = true;
// byte b = (byte) isTrue;
// short s = (short) isTrue;
- 출력값
ch2 : a
ch3 : ゚
댓글 남기기