Java 프로그래밍 언어 설계에 필수적인 클래스를 제공하는 패키지
https://docs.oracle.com/javase/8/docs/api/java/lang/package-summary.html
java.lang 패키지는 import구문으로 호출해야 사용 가능한 다른 패키지와 달리 import구문을 명시하지 않아도 사용 가능함
대표적인 클래스
기본형 타입에 해당하는 데이터를 객체로 포장해 주는 클래스
Wrapper 클래스는 산술 연산을 위해 정의된 클래스가 아니므로 인스턴스에 저장된 값 변경이 불가능하며, 값을 참조하기 위해 새로운 인스턴스를 생성하고 생성된 인스턴스의 값만을 참조할 수 있다
public class example {
public static void main(String[] args) {
Integer integer = Integer.valueOf(3); // 박싱
int i = integer.intValue(); // 언박싱
System.out.println("i = " + i);
Character ch = 'X'; // 오토박싱
char c = ch; // 오토언박싱
System.out.println("c = " + c);
// 실행결과
// 3
// c
}
}
public class example {
public static void main(String[] args) {
Integer integer1 = Integer.valueOf(3); // 박싱
Integer integer2 = Integer.valueOf(4); // 박싱
int int1 = integer1.intValue();
int int2 = integer2.intValue();
Integer result1 = integer1 + integer2; // 오토언박싱
Integer result2 = int1 - int2; // 오토박싱
int result3 = integer1 * int2; // 오토언박싱
System.out.println("result1 = " + result1);
System.out.println("result2 = " + result2);
System.out.println("result3 = " + result3);
// 실행결과
// result1 = 7
// result2 = -1
// result3 = 12
}
}
public class example {
public static void main(String[] args) {
Integer integer1 = Integer.valueOf(127); // 박싱
Integer integer2 = Integer.valueOf(127); // 박싱
Integer integer3 = Integer.valueOf(128); // 박싱
Integer integer4 = Integer.valueOf(128); // 박싱
Integer integer5 = new Integer(128);
Integer integer6 = new Integer(128);
System.out.println("(integer1 == integer2) = " + (integer1 == integer2));
System.out.println("(integer3 == integer4) = " + (integer3 == integer4));
System.out.println("(integer5 == integer6) = " + (integer5 == integer6));
// 실행결과
// (integer1 == integer2) = true
// (integer3 == integer4) = false
// (integer5 == integer6) = false
}
}
Integer 클래스의 valueOf 메소드
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
참고: Integer.valueOf()
위의 코드와 같이IntegerCache.low
(-128) 이상이면서IntegerCache.high
(127) 이하인 int 리터럴i
를 매개변수로 넘기게 된다면 Integer.valueOf() 메소드는IntegerCache
로부터 Integer 객체들을 리턴한다. 즉, 새로운 Integer 객체를 생성하는 것이 아닌 배우의 IetegerCache 객체에서 Integer 객체를 반환한다. 캐시의 최대값은 Integer인 경우에만 JVM 옵션을 통해 조정 가능하다.
Java Document
참고: Integer()
생성자를 통해 인스턴스를 생성하는 것보다 Integer.valueOf()를 통해 생성하는 것이 앞서 말한 IetegerCache 통해 더 나은 공간 및 시간 성능을 산출할 가능성이 높아 더 이상 사용되지 않는다.
출처
https://meetup.toast.com/posts/185
http://www.tcpschool.com/java/java_api_wrapper
https://docs.oracle.com/javase/9/docs/api/java/lang/Integer.html