티스토리 뷰

Java

[JAVA] 형 변환

TreeBomb 2023. 10. 9. 21:49

형 변환이란?

저번 글에서 변수에 대해 설명을 하였다 변수를 만들 때 자료형이라는 것이 쓰였는데 자료형을 다른 자료형으로 바꾸는 것을 의미한다. 자료형을 바꾸는 이유는 연산을 할 때 같은 자료형 끼리 연산을 하기 때문에 상황에 따라 형 변환이 필요할 때가 있다.

int num1 = 6;

double d = 3.14;

 

System.out.println("num1 + d = "+ (num1 + d));

num1 + d = 9.14

위 코드를 보면 의문점이 생길 것이다. 같은 자료형 끼리만 연산이 가능한 것으로 알고 있는데 오류가 안 나고 연산이 잘 될까?

그 이유는 자바에서는 자동으로 자료형을 변환해준다. 크기가 작은 자료형이 크기가 큰 자료형으로 자동으로 연산이 이루어지기 때문이다. 크기가 작은 int(4byte)가 크기가 큰 double(8byte)로 자동으로 변환된 것이다.

형 변환

일반적인 형 변환은 숫자를 담을 수 있는 기본 자료형에서만 가능하다.

byte, short, int, long, float, double가 있고 문자형인 char도 문자형인 동시에 정수형이기도 하기 때문에 형 변환을 할 수 있다.

int num = 23;

double change_num = (double)num;

 

System.out.println("num : " + num);

System.out.println(("change_num : " + change_num));

num : 23

change_num : 23.0

int형을 double형으로 변환하게 되면 int형 데이터에. 0 이 찍히게 된다.

double d = 3.14;

int change_d = (int)d;

System.out.println("d : " + d);

System.out.println("change_d : " + change_d);

d : 3.14

change_d : 3

double형을 int 형으로 변환하게 된다면 소수점 뒤 숫자들은 삭제가 된다. 크기가 큰 자료형에서 크기가 작은 자료형으로 변환하는 것이라 데이터 손실이 나는 것이다. 위 코드와 결과만 본다면 반올림이 되는 거 아닌가?라고 생각할 수도 있지만 반올림이 되는 것이 아니라 삭제가 되는 것이다. 코딩을 할 때 주의해서 사용하자.

기본 자료형 크기순

byte(1바이트) > short, char(2바이트) > int(4바이트) > long(8바이트) > float(4바이트) > doube(8바이트)

크기가 작은 것에서 큰 것으로 형 변환이 이루어질 때는 손실이 없고 큰 데이터에서 작은 데이터로 형 변환을 할 때는 손실이 난다.

String to Int

문자열에서 정수형으로는 평범한 방법으로는 불가능하다.

String str = "123";

int num = (int)str;  //오류

이런 식으로 하게 된다면 오류가 날것이다. 이때는 Integer.parseInt(문자열) 이 문법을 써야 한다.

String str = "123";

int num = Integer.parseInt(str);

System.out.println(num + 100);

223

여기서 문자열이 정수형으로 변한 것을 확인할 수 있다.

만약 문자열과 100을 더하는 거였으면 123100 이 나와야 하지만 정상적으로 더하기가 된 것을 보면 정수형으로 잘 변한 것을 확인할 수 있다.

 

[JAVA] 연산자

연산자란? - 연산이랑 데이터를 처리하고 결과를 산출하는 작업 - 연산은 항(피연산자)과 연산자로 이루어짐 - 항은 연산에 사용되는 값을 의미하며, 연산자는 기호를 의미 - 항과 연산자를 이용

treebomb-code.tistory.com

 

'Java' 카테고리의 다른 글

[JAVA] 제어문(if, switch)  (0) 2023.10.24
[JAVA] 연산자  (2) 2023.10.16
[Java] 변수  (0) 2023.10.02
[JAVA] 자바 출력문 print(), printf(), println()  (0) 2023.09.25
[JAVA] JDK 및 eclipse 다운로드  (0) 2023.09.18