코딩항해기
[JAVA] 자동형변환, 강제형변환, 문자열(String)형변환 본문
Java에는 데이터 타입을 바꾸는 형변환(casting)이 있다.
오늘은 그 중 세 가지 형변환에 대해 정리해보겠다.
첫째는 별 다른 조치 없이 자동으로 변환되는 자동형변환,
둘째는 특수한 조치를 취해줘야 변환되는 강제형변환,
셋째는 String의 메소드를 이용하는 문자열형변환이다.
[자동형변환]
자동형변환은 특정조건일 때 자동으로 형변환이 이루어진다.
정수 실수 연산을 거쳤을 때 (산술변환/일반산술변환)
자바에서 이항연산자는 두 피연산자의 타입이 일치해야 연산이 가능하기 때문에
타입이 다르게 되면 형변환이 필요해지는데, 이때 컴파일러가 자동으로 형변환해주게 된다.
이때 몇 가지 조건에 따라 형변환이 이루어진다.
1. 더 큰 byte를 가진 타입으로 일치 (단, 기본 타입인 int보다 작은 타입끼리의 연산일 경우 int로 통일)
2. 정수 + 실수 연산 시 실수로 변환
3. 문자열과의 연산의 경우 문자열로 변환
ex.
long + int -> long
float + int -> float
double + float -> double
byte + short -> int
char + short -> int
char + char ->int //아스키코드 값으로 변환됨
long + float -> float
문자를 정수로 변환할 때
자동형변환 때 char+char 연산을 할 경우 int로 자동형변환되는 것을 알 수 있다.
이 때 int로 바뀌는 이유는 컴퓨터는 문자를 문자로 저장하지 않고 숫자로 저장하기 때문이다.
숫자의 기준은 코드표에 맞춰서 변환(인코딩)이 되고, 자바에서는 유니코드 사용한다.
유니코드 인코딩에는 UTF-8, UTF-16, UTF-32가 있는데, 자바에서는 UTF-16을 사용한다
작은 byte타입의 값을 큰 byte타입을 지닌 변수에 저장할 때
강제형변환을 이용하면 작은 크기의 타입을 가진 변수에도 값을 변환하여 넣을 수 있지만,
큰 크기의 타입의 변수에 넣을 때에는 별 다른 조치 없이 바로 값이 변환되어 넣어진다.
어떤 경우에 자동형변환이 되고, 어떤 경우에 강제형변환이 가능한지는 강제형변환에서 한 번에 정리하겠다.
[강제형변환]
자동형변환이 되지 않을 때에는 강제형변환을 할 수 있다.
이 방식은 후에 다운캐스팅을 할 때에도 사용된다.
타입 | 값 | 자동형변환 가능여부 | 강제형변환 가능여부 |
int | long | O | O |
double | O | O | |
float | O | O | |
char | O | O | |
boolean | X | X | |
long | int | X | O |
double | O | O | |
float | O | O | |
char | X | O | |
boolean | X | X | |
double | int | X | O |
long | X | O | |
flaot | X | O | |
char | X | O | |
boolean | X | X | |
float | int | X | O |
long | X | O | |
double | O | O | |
char | X | O | |
boolean | X | X | |
char | int | O | O |
long | X | O | |
double | X | O | |
float | X | O | |
boolean | X | X | |
boolean | int | X | X |
long | X | X | |
double | X | X | |
float | X | X | |
char | X | X |
[문자열형변환]
String(문자열)의 경우 형변환 방식이 다른 타입들과는 다른데, 엄밀히 말하면 String은 클래스이기 때문이다.
따라서 강제형변환도 String클래스의 메소드를 사용하게 된다.
다른 자료형 > 문자열
문자열과 다른 자료형을 연결(+연산자가 연결연산자가 된다)하면, 자동으로 문자열 타입이 된다
int a = 0;
String b = a + “”;
문자열 > 다른 자료형
기본자료형은 기본자료형끼리 형변환이 되지만, 클래스 타입(참조타입)은 기본자료형으로 변환이 불가능하다.
String 타입은 Integer Double Boolean 클래스의 도움을 받아 형변환 할 수 있다.
int msg1 = Integer.parseInt("문자열");
double msg2 = Double.parseDouble("문자열");
...
'JAVA' 카테고리의 다른 글
[JAVA] 객체 생성하기 (0) | 2024.06.22 |
---|---|
[JAVA] 객체와 객체지향언어 장단점 (0) | 2024.06.21 |
[JAVA] 입력 클래스, 입력 메소드 (0) | 2024.06.20 |
[JAVA] 출력메소드와 제어문자, 서식문자 (0) | 2024.06.19 |
[JAVA] 자료형 - 원시타입, 참조타입 (+String 메소드) (0) | 2024.06.17 |