728x90
자동 형변환
큰 자료형에는 작은 자료형을 대입하면 자동으로 형변환이 이루어짐.(= 프로모션 형변환 , 확대 형변환)
double d = 123.456 ;// 8byte
int i = 123456; // 4byte
System.out.println("double d="+ d);
System.out.println("int i ="+ i);
d=i; // 자동 형변환 발생
System.out.println("자동 형변환 double = int ; =>"+ d);
강제 형변환
큰 자료형을 작은 자료형에 대입하기 위해 큰 자료형을 강제로 형변환을 명시하여 변환 (=디모션 형변환, 축소 형변환)
ex ) double 형을 int 형으로의 변환
d=555.555 ;
i =123456;
System.out.println("double d="+ d);
System.out.println("int i ="+ i);
i =(int)d;
System.out.println("강제 형변환 int =(int)double; =>"+ i);
ex) 강제 형변환 불가 (문자형-> 숫자형)
String sss = "가나다";
//i = (int)sss; //강제 형변환 불가
같은 크기의 다른 타입 (int / float : 4byte)
//같은 크기 다른 타입. (int / float - 4byte)
float f = 123.456f;
int n = 100;
System.out.println("float f="+ f);
System.out.println("int n ="+ n);
f = n;
System.out.println("f=n 넣은 후 :float f="+ f);
System.out.println("f=n 넣은 후 :int n ="+ n);
f=123.456f;
//n=f; //오류
System.out.println("float f="+ f);
System.out.println("int n ="+ n);
n =(int)f; // 강제적 형변환
System.out.println("n =(int)f; 후 :float f="+ f);
System.out.println("n =(int)f; 후 :int n ="+ n);
float 과 int 는 같은 크기를 지녔지만 , float 이 int 보다 표현범위가 넓기에
float 에 int 는 자동으로 형변환이 되어 들어가지만 ,
반대로 int에 float 을 넣을경우 강제 형 변환이 필요하다.
정수형 연산
자바에서는 4byte이하의 정수형의 연산결과가 int 타입으로 처리된다.
즉 short 끼리 더하더라도 int 형을 반환하기 때문에 ,
short로 명시적 형변환이 필요하다.
//정수형 연산
//4byte 이하의 정수형 연산의 결과는 무조건 int 타입으로 처리됨.
short s1 =10, s2 = 20 , s3 = 30;
//s3 = s1+s2; //int 를 short으로 변환할 수없다고 타입 미스매치 오류 뜸.
s3 =(short)(s1+s2);
char 와 int 의 사이
char 타입은 int 변환이 가능하다고 했다.
즉, char + int 는 int 로 자동 형변환이 이루어진다.
int를 char 타입으로는 강제형변환을 통해 형변환이 가능하다.
//char 타입은 int 변환이 가능함
char c = 'C';
n = 100;
System.out.println("(char)c="+ c+", (int)n ="+ n);
n=n+c;
System.out.println("(int)n=(int)n+(char)c 후: c="+ c+", n ="+ n);
System.out.println("(char)n ="+ (char)n);
다른 타입 다른 크기 (long(정수형 8byte) / float (실수형 4byte))
//long의 자동 형변환
// long(정수형 8byte) , float(실수형 4byte) 은 타입도 , 크기도 다름.
long longL = 10000L;
float fff = longL;
System.out.println("long longL :"+longL);
System.out.println("float fff:"+fff);
크기는 float 가 작으나 표현 범위는 long 보다 더 크기 때문에 자동으로 형변환이 일어난다.
정리
- 자동 형변환
- 작은 자료형의 값을 큰 자료형 변수에 대입할 때 자동으로 형변환이 이루어진다.
- 예를 들어, int 타입의 변수 값을 double 타입의 변수에 대입하면 자동으로 형변환이 일어난다.
- 강제 형변환
- 큰 자료형의 값을 작은 자료형 변수에 대입할 때는 자동으로 형변환이 이루어지지 않으며 명시적으로 형변환을 해주어야 한다.
- 예를 들어, double 타입의 값을 int 타입 변수에 대입하려면 (int)와 같이 명시적으로 형변환을 해주어야 한다.
- 형변환 불가능한 경우
- 문자열과 숫자형 간의 형변환은 불가능하다.
- 예를 들어, String 타입의 값을 int 타입으로 형변환할 수 없다.
- 같은 크기지만 다른 타입 간의 형변환
- float와 int는 크기는 같지만 타입이 다르다.
- 예를 들어 , int 타입의 값을 float 타입 변수에 대입할 때는 자동 형변환이 발생하지만 그 반대의 경우는 명시적 형변환이 필요하다.
- 정수형 연산
- 4byte 이하의 정수형 연산의 결과는 무조건 int 타입으로 처리된다.
- 따라서 short 타입 변수끼리의 연산 결과를 short 변수에 저장하려면 명시적 형변환이 필요하다.
- char 타입과 int 타입 간의 형변환
- char 타입은 int로 변환이 가능하.
- char 타입 변수와 int 타입 변수 간의 연산에서는 char 타입이 int로 자동 형변환된다.
- long과 float 간의 형변환
- long(8byte 정수형)과 float(4byte 실수형)은 크기와 타입이 다르다.
- 하지만 float의 표현 범위가 long보다 크기 때문에 자동 형변환이 된다.
'Developer > JAVA' 카테고리의 다른 글
JAVA , Date , Scanner (4) | 2024.07.21 |
---|---|
JAVA, 진수와 Interger 메서드 , String 메서드 (2) | 2024.07.21 |
JAVA , 값의 치환 / 기본자료형의 wrapper Class / 언더플로우 오버플로우 (0) | 2024.07.19 |
JAVA, 자바의 규칙과 멤버의 의미 , 자바의 변수 (0) | 2024.07.19 |
JAVA , 자바 파일의 구성 - 프로젝트 만들기 (0) | 2024.07.18 |