본문 바로가기
Java

Java_타입의 형변환

by 유서담 2023. 10. 24.

형변환

 

형변환은 값을 다른 타입의 값으로 변환하는 것이다.

 

 

형변환을 하는 이유

 

자바의 연산은 연산에 참여한 값의 타입과 연산결과가 항상 동일한 타입이다.

자바의 연산에 참여하는 값의 타입이 서로 다른 경우, 같은 타입으로 변환 후 연산이 일어난다.

(타입의 변환은 값의 손실이 발생하지 않는 방향으로 이루어진다.)

 

(값의 손실이 일어나지 않는 방향)
 1. 크기가 작은 타입 -> 크기가 더 큰 타입  ( long x = 10; int타입 10이 long타입 10으로 변환 후 대입  )
 2. 정밀도가 낮은 타입 -> 정밀도가 더 높은 타입  ( double x = 3; int타입 3이 double타입 3.0으로 변환 후 대입된다. )

 

 

기본 자료형의 형변환 방법 2가지

 

자동형변환

 

데이터의 손실이 발생하지 않는 방향으로의 형변환은 컴파일러가 자동으로 처리한다.

 

강제형변환

 

데이터의 손실이 발생하는 방향으로의 형변환은 자동으로 일어나지 않기 때문에, 개발자가 강제로 형변환 방향을 지정하는 것이다.

 

 

자동 형변환의 예시 사례


형변환을 안하는 경우

// 연산에 참여한 값의 타입과 연산결과는 동일하다.
// 정수/정수 --> 정수,	실수/실수 --> 실수
System.out.println(10/3);
System.out.println(10.0/3.0);

 

 

 

값의 타입이 달라 정수에서 실수로 형변환이 되는 경우

// 연산에 참여한 값의 타입이 서로 다른 경우, 같은 타입으로 변환 후 연산이 일어난다.
// 형변환 방향은 더 큰 데이터 타입 혹은 정밀도가 더 높은 타입으로 변환된다.
// 정수/실수 --> 실수	실수/실수 --> 실수
System.out.println(12/5.0);	// 12/5.0 --> 12.0/5.0 ---->  2.4
System.out.println(12.0/5);	// 12.0/5 --> 12.0/5.0 ---->  2.4

 

 

변수의 타입과 값의 타입이 달라서 형변환이 되는 경우

// 연산에 참여하는 변수의 타입과 값의 타입이 서로 다른 경우,
// 값의 타입을 변수의 타입과 같은 타입으로 변환 후 연산이 일어난다.
double num1 = 3;	// double num1 = 3.0 <-- 3;
System.out.println(num1);

 

 

형변환하려는 타입의 크기가 달라서 오류가 나는 경우

int num2 = 3.14;
// 변수의 타입이 int, 값의 타입이 double이다.
// 변수의 타입과 같은 타입으로 값을 변환하면 데이터의 손실이 발생한다.
// 따라서, 아래의 대입연산은 자동형변환이 일어날 수 없기 때문에, 오류다.

 

 

정수타입과 문자타입간의 형변환

 

char ch1 = 65;
System.out.println(ch1);
		
int num1 = 'A';
System.out.println(num1);

 

char ch1 = 65; 는 유니코드 65번에 해당하는 문자값이 대입

int num1 = 'A'; 는 문자 'A'의 유니코드 번호인 65가 대입

 

 

 


 

강제 형변환 예시사례

 

 

강제 형변환으로 큰 데이터 타입에서 작은 데이터 타입으로 형변환 하는 경우

int num3 = (int)3.14;
System.out.println(num3);	// 3이 출력된다

 

 

형변환을 어디에서 진행하는지에 따라 결과값이 달라지는 경우

 

int kor = 80;
int eng = 70;
int math = 70;
int subjectCount = 3;
int total = kor + eng + math;
double avg1 = (double)total/subjectCount;	// (double)220/3 -> 220.0/3 -> 220.0/3.0 -> 73.3333
double avg2 = (double) (total/subjectCount);	// (double)(220/3) -> (double)73 -> 73.0
System.out.println("평균점수 : "+avg1);	// 73.3333
System.out.println("평균점수 : "+avg2);	// 73.0

 

 

 

 

정리글

더보기

형변환이 되는 경우

 

정수 <-> 정수

예) byte x = 10; int y = x;

예) int x = 10; byte y = (byte) x;

 

실수 <-> 실수

예) double x= 3.14; float y = (float) x;

 

정수 <-> 실수

예) double x = 10;

예) int x = (int) 3.14;

 

정수 <-> 문자

예) char x = 65;

예) int x = 'A';

 

형변환이 안되는 경우 

 

문자열 <--> 정수

int x = (int) "1234";

 

문자열 <--> 실수

double x = (double)"3.14";

 

문자열 <--> 문자

String x = 'A';

char x = "A";

 

논리형 <--> 정수

boolean x = 1;

 

'Java' 카테고리의 다른 글

Java_반복문(for문, while문)  (0) 2023.10.27
Java_조건문( if문과 switch문 )  (0) 2023.10.26
Java_변수와 자료형  (0) 2023.10.24
Java 및 Java 설치방법  (0) 2023.10.23
Eclipse(이클립스) 설치방법  (0) 2023.10.20