728x90
★ 형변환
- Casting, Data Type Casting
- 하나의 자료형을 또 다른 자료형으로 변환하는 작업
- 코드 작성을 유연하게 하기 위해서 사용
- 값형끼리만 가능하다. (Boolean 제외)
- ex) byte, short, int, long, float, double, char
★ 오버플로우
- 명시적 형변환 시 발생하는 데이터가 넘치는 현상
1. 암시적 형변환
- 큰형 = 작은형
- 100 % 안전한 작업
- ex)
//--------------------암시적형변환----------------------
int n1;
int n2;
//= 연산자
//- LValue(Left Value)공간 = Rvalue(값)
//- LValue와 Rvalue의 자료형은 동일해야 한다.(100%)
//- LValue와 Rvalue의 자료형이 다르면 에러가 발생한다.
//100이라는 데이터를 n1이라는 공간에 넣어라
//int(n1) = int(100)
n1 = 100;
//n1이라는 공간의 데이터를 가져와서, n2라는 공간에 넣어라.
//int(n2) = int(n1)
n2 = n1; //변수끼리의 복사
System.out.println(n2);
short a = 10; //2byte, 원본
int b; //4byte, 복사본
// int = short > 에러!!!
// 암시적 형변환 발생(우리 눈에 보이지 않게 무엇인가 일어나고 있는 형변환)
// 큰형 = 작은형
// (int) : (자료형)데이터 > 형변환 연산자
b = a; //short를 int로 변환하고 int를 int에 넣음.
//뒤의 a를 int형으로 변환해라!
//b = (int)a; //번역 결과
System.out.println(b); //검증, 복사본 확인
int c = Integer.MIN_VALUE; //4byte, 원본
long d; //8byte, 복사본
//long = int
//암시적 형변환
d = c;
//d = (long)c; //번역 결과
System.out.println(d);
//——————————암시적형변환———————————
2. 명시적 형변환
- 작은형 = 큰형
- 경우에 따라 다르다. (안전 or 문제발생)
- 개발자가 신경을 써야할 부분. > 원본의 값이 복사본의 영역을 벗어나지 않는지
- 에러가 발생하지 않기 때문에 더욱 위험하다.
- ex)
//——————————명시적형변환———————————
int e = 100000; //4byte, 원본
short f; //2byte, 복사본
//Type mismatch: cannot convert from int to short
//short = int
//명시적 형변환 > 형변환 연산자를 생략하면 안된다. > 반드시 작성
f = (short)e;
System.out.println(f); //100,000을 넣었을 때, 출력이 -31072라는 현상이 발생함.
//ex) 은행 계좌
long g = 3000000000L; //내통장 > 30억
int h; //이체되는 계좌
//계좌간 복사
h = (int)g;
System.out.println(h); //계좌이체 결과 -1,294,967,296
3. 자료형별 형변환
- 자료형 마다 형변환 시 다른 경우가 생길 수 있다.
- 정수형 리터럴 int
- 실수형 리터럴 double
- 대입 연산자는 좌우 자료형이 동일해야 한다.
- ex)
//byte = int
//작은형(1) = 큰형(4) > 명시적 형변환
byte m1 = 10; //서비스 문법
//short = int
//작은형(2) = 큰형(4) > 명시적
short m2 = 10;
//int = int
//형변환 없음.
int m3 = 10;
//long = int
//큰형(8) = 작은형(4) > 암시적
long m4 = 10;
//float = double
//작은형(4) = 큰형(8)
//float f1 = (float)3.14;
float f1 = 3.14f;
//double = double
double f2 = 3.14;
//정수 <-> 실수
long n1 = 100; //원본(8)
float n2; //복사(4)
//float(4) = long(8)
//암시적 형변환
//이게 되는 이유 : float의 저장 공간이 long보다 크기 때문이다.
n2 = n1 + 1F;
System.out.println(n2);
double n3 = 3.14;
int n4;
//명시적 형변환
//작은형 = 큰형
n4 = (int)n3;
System.out.println(n4); //소수점 이하 절삭
//*** 정수와 실수간의 크기 비교는 단순하게 물리 크기인 byte로 계산하는게 아니라, 실제 표현 가능한 숫자의 범위로 비교해야 한다.
//- int(4) = float(4) : x
//- int(4) < float(4) : o
//크기 정리 (정수 < 실수)
//byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
//byte, short, int, long, float, double
//char
//char > 문자형 > 정수형(숫자형)
//char = 숫자 자료형이다.
//'A' > 숫자?
//'@' > 숫자?
//char(2byte) = short(2byte)
char c1 = 'A'; //원본
short s1; //복사본
//명시적 형변환
s1 = (short)c1;
System.out.println("s1: " + s1); //'A' = 65
short s2 = 97; //원본 //'a' = 97
char c2;
//명시적 형변환
c2 = (char)s2;
System.out.println("c2 : " + c2); // 97 = 'a'
//*** char를 short로 변환하면 안된다.
//*** char를 문자코드로 변환하려면 int를 사용한다.
//- char > int
//- int > char
char c3 = '가';
int a3;
//암시적 형변환
a3 = c3;
System.out.println("a3: " + a3);
//몇몇 문자의 코드 암기!!
System.out.println((int)'A'); //65
System.out.println((int)'Z'); //90
System.out.println((int)'a'); //97
System.out.println((int)'z'); //122
System.out.println((int)'0'); //48
System.out.println((int)'9'); //57
//한글 체계
//- 완성형 한글(가, 나, 다, 강, 곽, 감..)
//- 조합형 한글(ㄱ, ㄴ, ㄷ, ㅏ, ㅑ…) > 사용x
System.out.println((int)'가'); //44032
System.out.println((int)'힣'); //55203
}
}
728x90
'자바' 카테고리의 다른 글
JAVA STEP 10. 자바 예제모음 (0) | 2023.02.06 |
---|---|
JAVA STEP 9. Operator (0) | 2023.02.06 |
JAVA STEP 7. 카페 무인전산 시스템 만들기(기초) (0) | 2023.02.05 |
JAVA STEP 6. INPUT (0) | 2023.02.03 |
JAVA STEP 5. OUTPUT (0) | 2023.02.03 |