자동 포장
3359 단어 Java 기술 요약
일반적으로 우리는 클래스의 대상 실례를 만들 때 다음과 같이 한다.
Class a = new Class(parameter);
Integer 객체를 작성할 때는 다음과 같이 할 수 있습니다.
Integer i = 100; (참고: int i = 100; 아님)
실제로 위의 코드를 실행할 때 시스템은 우리를 위해 Integer i = Integer를 실행했다.valueOf(100); (@흑면만두와 @MayDayIT의 알림에 감사합니다)
이것이 바로 기본 데이터 유형의 자동 포장 기능이다.
기본 데이터 형식과 대상의 차이
기본 데이터 형식에 호출할 방법이 없습니다.
eg: int t = 1; t. 뒤에는 방법이 없다.
Integer t =1; t. 뒤에 당신을 호출할 수 있는 많은 방법이 있습니다.
Integer i = 100과 같은 자동 포장은 언제 이루어집니까?
컴파일러가 자동으로 다음과 같은 구문을 컴파일하는 것과 같습니다. Integer i = Integer.valueOf(100);
언제 자동 해체 자동 해체(unboxing), 즉 대상의 기본 데이터를 대상에서 자동으로 꺼내는 것이다.자동 분리는 다음과 같습니다.
1 Integer i = 10;//2int t = i;//상자를 뜯어서 실제로 int t = i.intValue () 를 실행했습니다.연산을 할 때도 상자를 뜯을 수 있다.
1 Integer i = 10; 2 System.out.println(i++);
Integer의 자동 포장//-128~127 이외의 수 Integer i1 = 200;Integer i2 =200; System.out.println("i1==i2:"+(i1==i2);//128~127 이내의 수는 Integer i3 = 100;Integer i4 = 100;System.out.println("i3==i4:"+(i3==i4)), 출력 결과는 i1====i2:false i3==i4:true 설명:
equals()는 두 객체의 값(내용)이 동일한지 여부를 비교합니다.
"=="은 두 객체의 참조(메모리 주소)가 동일한지 또는 두 기본 데이터 유형의 변수 값이 동일한지 비교하는 데 사용됩니다.
앞에서 말했듯이 int의 자동 포장은 시스템이 Integer를 실행한 것이다.value Of (int i), Integer 를 먼저 보십시오.java의 원본:
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high) // ,IngegerCache.high 127
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
public static Integer value Of(int i) {if(i>=-128 & i <=Integer Cache.high)//설정이 없으면 Inger Cache.high 기본값은 127 return Integer Cache.cache[i + 128];else return new Integer(i);
Integer.valueOf (int i) 는 캐시된 Integer 대상을 되돌려줍니다. (새 대상이 아닙니다.)
그래서 범례에서 i3과 i4는 사실상 같은 대상을 가리킨다.
다른 값은 Integer를 실행합니다.value Of (int i) 는 새 Integer 대상을 되돌려줍니다. 따라서 예에서 i1과 i2는 다른 대상을 가리킵니다.
물론 자동 포장 기능을 사용하지 않을 때는 일반 클래스의 대상과 마찬가지로 다음 예를 보십시오.
1 Integer i3 =new Integer(100); 2 Integer i4 =new Integer(100); 3 System.out.println("i3==i4:"+(i3==i4));//false 표시(쉬운 이름의 알림 O() O~)
String의 포장재를 분리하는 방법은 다음과 같습니다.
1 String str1 =”abc”; 2 String str2 =”abc”; 3 System.out.println(str2==str1);//true 4 System으로 내보냅니다.out.println(str2.equals(str1));//true 5 6 String str3 = new String("abc")으로 출력합니다.7 String str4 =new String(“abc”); 8 System.out.println(str3==str4);//false 9 System으로 출력합니다.out.println(str3.equals(str4));//트루로 출력하는 건 어떻게 설명하죠?아무 것도 보이지 않는 것 같다.그럼 예를 하나 더 봅시다.
1 String d =”2”; 2 String e =”23”; 3 e = e.substring(0, 1); 4 System.out.println(e.equals(d));//true 5 System으로 내보냅니다.out.println(e==d);//출력이false인 두 번째 예에서 e의 초기값은 d와 다르기 때문에 e와 d는 각각 하나의 대상을 만들었고 (e==d)는false이다.같은 이치로 알 수 있듯이 첫 번째 예에서의str3과str4도 각각 new의 대상이고str1과str2는 같은 대상을 인용했다.
http://www.cnblogs.com/danne823/archive/2011/04/22/2025332.html