[Java] 자동형변환(1)

Date:     Updated:

카테고리:

태그:

java.png

자동형변환

자동형변환 규칙

  1. 자바에서 다른 타입끼리의 연산은 피연산자들이 모두 같은 타입인 경우 실행할 수 있다
    • 즉, 같은 데이터 타입끼리만 연산을 수행할 수 있다

형변환의 종류와 규칙

  1. 자동형변환(묵시적 형변환) : 컴파일러가 자동으로 수행해주는 타입 변환
    • 작은 자료형에서 큰자료형으로 자동 형변환 된다
    • 정수는 실수로 자동 형변환이 된다
    • 문자형은 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) (바꿀 자료형) 값;

자동형변환 규칙의 반대 상황에서 강제형변환이 필요하다

강제형변환 규칙

  1. 큰 자료형에서 작은 자료형으로 변경 시 강제 형변환이 필요하다
  2. 실수를 정수로 변경 시 강제 형변환이 필요하다
  3. 문자형은 int 미만 크기의 변수에 저장할 때 강제 형변환이 필요하다
  4. 논리형은 강제 형변환 규칙에서도 제외된다

큰 자료형에서 작은 자료형으로 변경 시 강제 형변환이 필요하다

  • 정수 끼리의 강제 형변환
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 : ゚

요약. 강제 형변환은 데이터를 다른 자료형으로 변환하는데 쓰이고 주로 데이터 손실이 발생하는 경우 쓰인다

오늘도 열심히 했다 그럼 내일도 열심히!!

Java 카테고리 내 다른 글 보러가기

댓글 남기기