반응형
Exam0930 - 명시적 형변환 : 실수→정수 (flaot → int, double → long)
package bitcamp.ex04;
public class Exam0930 {
public static void main(String[] args) {
float f = 3.14f;
int i = (int) f; // 명시적 형변환: float를 int로 변환, 소수점 이하가 잘림
System.out.println(i);
double d = 9876.56789;
long l = (long) d; // 명시적 형변환: double을 long으로 변환, 소수점 이하가 잘림
System.out.println(l);
}
}
// 명시적 형변환
// - 큰 메모리의 값을 작은 메모리로 변환할 때
// - 부동소수점을 정수로 변환할 때
// - 문법
// 변수 = (바꾸고자하는타입) 변수 또는 값;
//# 명시적 형변환 (Explicit Type Casting)
//
//public class Exam0930 {
// public static void main(String[] args) {
//
// // 부동소수점 메모리의 값은 정수 메모리에 직접 저장할 수 없습니다.
// // 그럼에도 저장하려 한다면, 명시적 형변환 문법을 사용해야 합니다.
// //
// // 명시적 형변환을 통해 부동소수점의 값을 정수 메모리에 저장할 때
// // 소수점 이하의 값이 짤립니다.
// //
// // "명시적 형변환(explicit type conversion = explicit type casting)"?
// // - 컴파일러에게 강제로 값을 넣을 것을 명령하는 것.
// //
// // float ==> int
// float f = 3.14f;
// int i = (int)f; // 소수점 이하가 제거됩니다.
// System.out.println(i);
//
// // double ==> long
// double d = 9876.56789;
// long l = (long)d; // 소수점 이하가 제거됩니다.
// System.out.println(l);
// }
//}
Exam0940 - 명시적 형변환 : 큰메모리→작은 메모리 (byte, short, int, long)
package bitcamp.ex04;
public class Exam0940 {
public static void main(String[] args) {
byte b = 100;
short s = 100;
int i = 100;
long l = 100;
// 큰 메모리의 정수 값을 작은 메모리에 저장하는 경우
// => 컴파일 오류가 발생한다.
// => 해결책? 명시적 형변환을 해야 한다.
// 1) 큰 메모리의 값이 작은 메모리에 충분히 들어가는 경우
// short ==> byte
byte b2 = (byte)s; // 명시적 형변환
System.out.println(b2);
// int ==> byte
b2 = (byte)i; // 명시적 형변환
System.out.println(b2);
// long ==> byte
b2 = (byte)l; // 명시적 형변환
System.out.println(b2);
// 2) 큰 메모리의 값이 작은 메모리에 들어 갈 수 없는 경우
// => 앞 쪽 바이트의 값이 짤려서 들어간다.
int i2 = 0b0000_0000_0000_0000_0000_0001_0010_1100; // = 300(10진수)
b2 = (byte) i2; //
System.out.println(b2); // 0b0010_1100
l = 400_0000_0000L; // 0x00_00_00_09_50_2f_90_00
i = (int)l; // 큰 메모리의 값이 작은 메모리에 들어가지 못하는 경우
System.out.println(l); // 앞 쪽 바이트가 짤린다.
System.out.println(i);
System.out.println(0x502f9000);
}
}
//# 형변환 - 명시적 형변환 : 큰 정수 변수의 값을 작은 정수 변수에 저장
//
// 큰 값을 작은 메모리에 넣는 것은 아무런 의미가 없다.
// 해서는 안된다.
// 다만,
// 큰 메모리의 값을 바이트 단위로 쪼개고 싶을 때 유용하다.
Exam0950 - 명시적 형변환이 불가능한 경우 (정수,boolean / 문자열)
package bitcamp.ex04;
//# 형변환 - 명시적 형변환이 불가능한 경우
//
public class Exam0950 {
public static void main(String[] args) {
// 1) 정수 메모리끼리 형변환이 가능하다.
// 2) 부동소수점을 정수로 형변환이 가능한다.
// 3) 형변환 없이 정수는 부동소수점 메모리에 저장할 수 있다.
// 4) 숫자를 문자 코드로 형변환 가능한다.
// 그 외에는 형변환 불가!
// 예) 정수, 부동소수점 ==/==> boolean
boolean bool;
// int,float => boolean
// bool = (boolean) 1; // 컴파일 오류!
// 예) 문자열 ==/==> 정수, 부동소수점, 문자, boolean
// String ==> int, float, char , boolean
// boolean v1 = (boolean) "true"; // 컴파일 오류!
// char v2 = (char) "가"; // 컴파일 오류!
// int v3 = (int) "123"; // 컴파일 오류!
// float v4 = (int) "3.14f"; // 컴파일 오류!
}
}
//# 형변환 - 명시적 형변환이 불가능한 경우
//
// 1) 정수 메모리끼리 형변환이 가능하다.
// 2) 부동소수점을 정수로 형변환이 가능하다.
// 3) 형변환 없이 정수는 부동소수점 메모리에 저장할 수 있다.
// 4) 숫자를 문자 코드로 형변환할 수 있다.
// 그 외에는 형변환 불가!
// 예) 정수, 부동소수점 ==/==> boolean
boolean bool;
// bool = (boolean) 1; // 컴파일 오류!
// 예) 문자열 ==/==> 정수, 부동소수점, 문자, boolean
// boolean v1 = (boolean) "true"; // 컴파일 오류!
// char v2 = (char) "가"; // 컴파일 오류!
// int v3 = (int) "123"; // 컴파일 오류!
// float v4 = (int) "3.14f"; // 컴파일 오류!
Exam0951 - 명시적 형변환 불가능한 경우, 특별한 메서드를 통해서 형변환
package bitcamp.ex04;
public class Exam0951 {
public static void main(String[] args) {
byte b = Byte.valueOf("100");
short s = Short.valueOf("32767");
int i1 = Integer.valueOf("2122223333"); // 문자열 ==> int
int i2 = Integer.parseInt("2122223333"); // 문자열 ==> int
long l = Long.valueOf("9221111222233334444");
float f1 = Float.valueOf("3.14f");
float f2 = Float.parseFloat("3.14f");
double d = Double.valueOf("9876.54321");
boolean bool1 = Boolean.valueOf("TRUE"); // 문자열 ==> boolean
boolean bool2 = Boolean.parseBoolean("TRUE"); // 문자열 ==> boolean
char c = "가나다".charAt(1); // => 나
System.out.println(b);
System.out.println(s);
System.out.println(i1);
System.out.println(i2);
System.out.println(l);
System.out.println(f1);
System.out.println(f2);
System.out.println(d);
System.out.println(bool1);
System.out.println(bool2);
System.out.println(c);
}
}
//# 형변환 - 명시적 형변환이 불가능한 경우, 특별한 메서드를 사용하면 가능하다.
//
// 1) 정수, 부동소수점, 문자열을 다른 타입으로 변환하는 특별한 메서드를 제공한다.
// 2) 메서드를 사용하여 형변환을 수행할 수 있다.
반응형