반응형
형변환과 데이터크기
//형변환과 데이터의 크기
System.out.println("A" + 10); //A10
System.out.println('A' + 10);
System.out.println((char)('A' + 10));
결과값
A10
75
K
'A'에 10을 더한값이 75가 나온다.
75인이유 = char + int 는 int , char형으로 보고 싶다면 캐스팅 진행해야한다.
casting하면 K값이 나온다.
- 작은 타입의 경우 큰타입에 그냥 넣어도 상관 없다.
- int a = byte값을 넣을 수 있다.
- 반대의 경우에는 X => 형변환이 필요하다(casting)
- byte b = (byte)a; -> casting 작업이 필요하다.
- 캐스팅 작업을 잘 하려면 type의 크기를 잘 알고 있어야 한다.
- 실수형은 무조건 정수형보다 크다.
- byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
- float이 long보다 큰 타입인 이유는 표현할 수 있는 값의 경우의 수가 float이 더 크기 때문이다.
casting
1. casting이 필요 없는 코드 (자동변환)
public class CastingEx01 {
public static void main(String[] args) {
byte b = 10;
int s = b; // byte < int형으로 자동형변환 (문제없음)
short i = b; // byte < short형으로 자동형변환
long l = b; // byte < long
char c = '가';
int j = c; // char < int 문제없음. 자동변환
System.out.println("'가'의 유니코드 숫자값: " + j);
int k = 1000;
double d = k; //int < double
System.out.println(d);
}
}
결과값
'가'의 유니코드 숫자값: 44032
1000.0
2. casting이 필요한 코드
/*
* 크기가 큰 타입을 작은 타입으로 변환할때 (type) 캐스팅을 이용해서
* 명시적 형변환을 해야합니다.
*/
int i = 70;
//char c = i; error:cannot convert from int to char
char c = (char)i;
short s = (short)i;
System.out.println("c:" + c + " s:" +s);
double d = 3.14;
int k = (int)d;
System.out.println("k:" + k);
결과값
c:F s:70
k:3
❗ casting할때 주의 할 점
- 해당 값을 받을 수 없는 범위가 들어오면 잘려나가고, 쓰레기값이 저장될 수 있다.
/*
* 캐스팅을 할때 주의 할 점!
* 해당 값을 받을 수 없는 범위가 들어오면 잘려나간다.
* 즉, 쓰레기값이 저장된다.
*/
int a = 1000;
byte b = (byte)a;
//byte는 1000의 값을 가질 수 없다. 128까지 가능이니까. 쓰레기값이 들어간다.
//1000이 (바이너리값 0011 1110 1000임. byte니까 앞부분이 잘려서 1110 1000만 사용) = -24
System.out.println("b:" + b);
결과값
b:-24
❗ 예외적인 casting
/*
* 예외적인 casting case
* char, short는 크기가 같지만
* 문자형과 숫자형이기 때문에, 형변환이 필요하다.
*/
char cc = 'A';
short ss = (short)cc;
System.out.println(ss);
➰ casting의 법칙
- 다른 타입의 데이터 연산을 진행할 경우, 큰 데이터 타입을 가진 쪽에 맞춰 형변환되어 연산을 진행한다.
- int보다 작은 데이터 타입의 연산은 무조건 int로 형변환이 된다.
반응형
'국비지원 > JAVA' 카테고리의 다른 글
| [JAVA] 2-5. 입력받기 (Scanner사용) (0) | 2022.09.22 |
|---|---|
| [JAVA] 2-4. 연산자 Operator / 2항연산자 / 3항연산자 (0) | 2022.09.22 |
| [JAVA] 2-2. 데이터타입 (0) | 2022.09.22 |
| [JAVA] 2-1. 변수 (0) | 2022.09.22 |
| [JAVA] 1-6. eclipse의 export/import (0) | 2022.09.21 |