728x90
ch9 - 28 ~ 31
문자열과 숫자 변환, 오토박싱 & 언박싱
ch9 - 28
문자열을 숫자로 변환 하기.
- 문자열을 숫자 (or 래퍼클래스) 로 변환 하는 다양한 방법.
int i = new Integer("100").intValue(); // floatValue(), longValue(), ..
>> 래퍼 클래스인 Integer 100 에 intValue() 메서드를 사용해서 원시타입인 int 형의 데이터로 바꿀 수 있다.
int i2 = Integer.parseInt("100"); // 주로 이 방법을 많이 사용 한다.
Integer i3 = Integer.valueOf("100"); // parseXxx("str") 메서드가 귀찮으면, valueOf("str") 사용 하면 된다.
대신에,
parseXxx("str") 메서드를 사용 하면, 반환 값이 원시타입 인데,
valueOf("str") 메서드를 사용 하면, 반환 값이 래퍼 클래스 이다.
하지만, 타입은 래퍼 클래스 로 받는게 정석이지만, 그냥 원시타입 으로 받는것이 가능 하긴 하다.
Double i4 = Double.valueOf("500");
↓
double i4 = Double.valueOf("500"); // 원시타입 가능.
만약에, 숫자를 문자로 바꾸고 싶으면 .toString() 메서드를 사용 하면 된다.
- n진법의 문자열을 숫자로 변환 하는 방법.
int i4 = Integer.parseInt("100", 2); 2진수로 바꿔주기. // 100(2) -> 4 (10진수로 보여 준다)
int i5 = Integer.parseInt("100", 8); 8진수로 바꿔주기. // 100(8) -> 64 (10진수로 보여 준다)
int i6 = Integer.parseInt("100", 16); 16진수로 바꿔주기. // 100(16) -> 256 (10진수로 보여 준다)
int i7 = Integer.parseInt("FF", 16); 16진수로 바꿔주기. // 100(16) -> 255 (10진수로 보여 준다)
int i8 = Integer.parseInt("FF"); 10진수로 바꿔주기. (인자에 n진수 작성을 안했으니까)
--> NumberFormatException 발생 한다.
--> why ?
--> FF를 10진수로 표현 할 수 없어서 ~
예제 01 )
class Ex9_15 {
public static void main(String[] args) {
int i = new Integer("100").intValue();
int i2 = Integer.parseInt("100");
Integer i3 = Integer.valueOf("100");
int i4 = Integer.parseInt("100", 2);
int i5 = Integer.parseInt("100", 8);
int i6 = Integer.parseInt("100", 16);
int i7 = Integer.parseInt("FF", 16);
// int i8 = Integer.parseInt("FF"); // NumberFormatException 발생
Integer i9 = Integer.valueOf("100", 2);
Integer i10 = Integer.valueOf("100", 8);
Integer i11 = Integer.valueOf("100", 16);
Integer i12 = Integer.valueOf("FF", 16);
// Integer i13 = Integer.valueOf("FF"); // NumberFormatException 발생
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println("100(2) -> " + i4);
System.out.println("100(8) -> " + i5);
System.out.println("100(16)-> " + i6);
System.out.println("FF(16) -> " + i7);
System.out.println("100(2) -> " + i9);
System.out.println("100(8) -> " + i10);
System.out.println("100(16)-> " + i11);
System.out.println("FF(16) -> " + i12);
}
}
[ console ]
ch9 - 30
오토박싱 & 언박싱
예시 )
int -> 기본 (원시) 타입
이것을
Integer -> 래퍼클래스
로 자동 변환 해주는 기능을 "오토박싱" 이라 한다.
반대로,
Integer을 int 타입으로 변환 해주는 기능을 "언박싱" 이라 한다.
기본형과 참조형 간의 자동 변환 >> 오토박싱 & 언박싱
- JDK 1.5 이전에는 기본형 (원시타입) 과 참조형 간의 연산이 불가능 했다.
int i = 5;
Integer iObj = new Integer(7);
int sum = i + iObj; // 에러 : 기본형과 참조형 간의 연산 불가. (JDK 1.5 이전)
하지만, JDK 1.5 이후 부터는, 오토박싱 & 언박싱 기능을 제공해줘서 연산이 가능해졌다.
하지만, 자바의 기본 개념 자체가 바뀐게 아니라, 자바의 컴파일러가 코드를 변환 해주는 것이다.
컴파일 전의 코드
int i = 5;
Integer iObj = new Integer(7);
int sum = i + iObj; >> 불가능.
컴파일 후의 코드
int i = 5;
Integer iObj = new Integer(7);
int sum = i + iObj.intValue(); // 기본형으로 intValue() 메서드를 자동으로 사용해줘서 바꿔준다.
(언박싱)
- 기본형의 값을 객체로 자동 변환 하는 것을 오토박싱 이라 하고, 그 반대는 언박싱 이라 한다.
예시 )
List<Integer> list = new ArrayList<Integer>();
list.add(10); // 오토박싱. 10 -> new Integer(10)
즉, list.add(new Integer(10));
int value = list.get(0); // 언박싱. new Integer(10) -> 10
value = 10; // 원래는 intValue() 메서드를 사용 해서 원시타입으로 바꿔줘야 한다.
원래는 제네릭을 Integer로 해줬기 때문에,
Integer 객체만 저장이 가능한 배열리스트 이다.
정리 : 개발자가 쉽게 개발 할 수 있도록, 컴파일러가 코드를 대신 자동으로 추가해주는것이다. (오토박싱 & 언박싱)
ch-9 - 31
오토박싱 & 언박싱 예제
class Ex9_16 {
public static void main(String[] args) {
int i = 10;
// 기본형을 참조형으로 형변환 (형변환 생략 가능)
Integer intg = (Integer) i; // Integer intg = Integer.valueOf(i);
Object obj = (Object) i; // Object obj = (Object)Integer.valueOf(i);
Long lng = 100L; // Long lng = new Long(100L); (기본형을 참조형에 저장 가능 => 오토박싱)
int i2 = intg + 10; // 참조형과 기본형 간의 연산 가능
long l = intg + lng; // 참조형 간의 덧셈도 가능
Integer intg2 = new Integer(20);
int i3 = (int) intg2; // 참조형을 기본형으로 형변환도 가능 (형변환 생략 가능)
Integer intg3 = intg2 + i3;
System.out.println("i = " + i);
System.out.println("intg = " + intg);
System.out.println("obj = " + obj);
System.out.println("lng = " + lng);
System.out.println("intg + 10 = " + i2);
System.out.println("intg + lng = " + l);
System.out.println("intg2 = " + intg2);
System.out.println("i3 = " + i3);
System.out.println("intg2 + i3 = " + intg3);
}
}
[ console ]
반응형
'Java의 정석 > java.lang 패키지 & 유용한 클래스' 카테고리의 다른 글
래퍼 클래스, Number 클래스 (0) | 2023.09.02 |
---|---|
StringBuilder, Math 클래스 (0) | 2023.09.02 |
StringBuffer 클래스의 메서드 (0) | 2023.09.02 |
StringBuffer 클래스 (문자열 저장 & 다루기) (0) | 2023.09.01 |
StringJoiner, 문자열과 기본형 변환 (0) | 2023.09.01 |