String str="안녕";
System.out.println("문자출력 :" + 100);
System.out.println("문자출력 :" + str);
System.out.println("문자출력 :" + "하다");
System.out.println("\"출력\"");
System.out.println("\'A\'");
System.out.println("\\A\\");
✍ 입력
System.out.println("Hello\n\"Java\"\t\\programming");
🧾 출력
Hello
"Java" \programming
자바의 기본 데이터 타입을 변환
boolean타입을 제외한 기본 데이터 타입 간의 변환
정수와 실수 연산 → 연산 수행 안됨
하나의 자료형으로 통일한 후 연산
작은 데이터 타입 큰 데이터 타입으로 변환
형변환을 명시적으로 하지 않음
수형 변수에 정수형 변수값을 저장 // 자동으로 형변환
실수 = 정수, 큰 데이터 타입 변수 = 작은 데이터 타입변수
byte → short(char) → int → long → float → double
실수형은 정수형보다 무조건 큰 타입
int n = 10;
double d = n;
System.out.println(d); // 출력 10.0
byte a1 =10;
short a2=256;
a2=a1; // 오른쪽 값이 왼쪽 형식으로 넘어가는듯?
System.out.println(a2); // 출력 : 10
큰 데이터 타입 → 작은 데이터 타입으로 변환
형변환 연산을 사용해서 강제적으로 형변환
강제적으로 형변환시 기존 데이터가 아닌 다른 데이터 저장
작은 데이터 타입 = (작은 데이터 타입) 큰 데이터 타입
double d2 = 3.4;
int n2 = (int)d2; //(int)형변환 연산
System.out.println(n2); // 3으로 출력
byte b1=10;
short b2=256;
b1=(byte)b2;
//(byte)형변환 연산 기억장소 범위 넘어감 → overflow
System.out.println(b1); // 관련없는 0으로 출력
int i=100;
float f=i; // 묵시적 형변환
System.out.println(f); // 100.0
// long 8byte, float 4byte
// 실수형은 정수형보다 무조건 큰 타입으로 취급
long l=83983L; // long은 8byte지만 정수형이다
float f2=l; // float는 4byte지만 실수형이라 범위가 더 넓다.
System.out.println(f2); // 23983.0 [묵시적 형변환]
float f3=3.14f;
long l2= (long)f3;
System.out.println(l2); // 3
char = byte
byte, short 타입의 음수 범위가 char 타입(양수만 가능)보다 크므로 자동 형변환 불가능 (명시적 형변환 해야 됨)
char ch=65;
short sh=65;
byte by=65;
ch = (char)by;
System.out.println(ch); // A
ch = (char)sh;
System.out.println(ch); // A
by=(byte)ch;
System.out.println(by); // 65
sh=(short)ch;
System.out.println(sh); // 65
int(큰)4byte = char(작은)2byte 자동으로 형변환
int i1 = ch;
System.out.println(i1); //65
long(큰) = int(작은) 자동으로 형변환
int i2=1234;
long l22=i2;
int(작은) = long(큰) 명시적으로 형변환
i2=(int)l22;
long l3=10000000000L;
int i3=(int)l3;
System.out.println(i3); // 범위가 넘어가서 오버플로 발생
// 출력 1410065408
float f5 =1.1f;
double d5=f5;
System.out.println(d5); //1.100000023841858
연산을 수행할 때 데이터 타입을 일치 시킨 후 연산을 수행(자동으로 형변환)
byte b1=10, b2=20,b3;
System.out.println(b1+b2); // 30
// b1+b2 → byte+byte → int
// byte=(byte)int 명시적 형변환
b3=(byte)(b1+b2); // 30
char ch='A'; // 65
// ch+3 → char + int → int (자동)
System.out.println(ch+3); // 68
char ch2=(char)(ch+3); (명시적)
System.out.println(ch2); // D
int i1=100;
long l1=200L;
// int+long => long
System.out.println(i1+l1);
int i2=(int)(i1+l1);
System.out.println(i2);
float f2=0.1f;
double d2=0.1;
// float + double => double
// 0.20000000149011612 근사치 표현 -> 잘못된 결과
System.out.println(f2+d2);
// double -> float 강제적으로 변환 후 연산
System.out.println(f2+(float)d2); // 0.2
byte b5=100+20;
// byte b6=100+30; 범위 넘어감
byte b6=(byte)(100+30);
System.out.println(b6); // -126(오버플로우)
double형 float형 연산후 int형으로 변환하기
double d5=1.2;
float f5=0.9F;
int i5= (int)d5 + (int)f5;
int i6= (int)(d5+f5);
System.out.println(i5); // 1
System.out.println(i6); // 2
char형 int형 형변환하기
char ch1 = 'A';
System.out.println((int)ch1); //65
int ch3 = 67;
System.out.println((char)ch3); //C
연습문제) 변수 두 개를 선언해서 10과 2.0을 대입하고 두 변수의 사칙 연산 결과를 정수로 출력해보세요.
int i7=10;
double d1 = 2.0;
int i8 = (int)(i7+d1);
System.out.println(i8); // 더하기 12
int i9 = (int)(i7-d1);
System.out.println(i9); // 빼기 8
int i10 = (int)(i7*d1);
System.out.println(i10); // 곱하기 20
int i11 = (int)(i7/d1);
System.out.println(i11); // 나누기 5
연습문제) '글'이라는 한글 문자의유니코드 값을 찾아서 char형으로 선언한 변수에 저장한 뒤 그 변수를 출력하여 확인해 보세요.
char ch4 ='\uAE00';
System.out.println(ch4); // 글