내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
먼저 코드를 살펴보겠습니다
int a0=127;
int a1=127;
Integer a2=127;
Integer a3=127;
System.out.println(a0==a1); // 1、运行结果是true
System.out.println(a0==a2); // 2、运行结果是true
System.out.println(a2==a3); // 3、运行结果是true
System.out.println(a2.equals(a0)); // 注意这里必须是包装类的a2才能使用equals,a0不能使用
// 4、运行结果是true
System.out.println(a2.equals(a3)); // 5、运行结果是true
System.out.println("-----------------------------");
int b0=200;
int b1=200;
Integer b2=200;
Integer b3=200;
System.out.println(b0==b1); // 6、运行结果是true
System.out.println(b0==b2); // 7、运行结果是true
System.out.println(b2==b3);// 8、运行结果是false
System.out.println(b2.equals(b0)); // 9、运行结果是true
System.out.println(b2.equals(b3)); // 10、运行结果是true
내가 예상했던 실행 결과가 나왔나요?
실제로 8회차 결과는 이른바 128트랩이다.
Java 128 트랩은 기본 유형 데이터의 캡슐화 클래스에 의해 저장된 값이 128보다 크거나 같을 때 각 클래스의 주소가 동일하지 않음을 의미합니다.표시되기 위해 128일 필요는 없습니다.
쉽게 말하면 127보다 작거나 같을 때, -128보다 크거나 같을 때 자동으로 박싱되는 값은 같은 주소에 존재하는 값이 되고, 127보다 클 때는 그 값이 됩니다. 자동으로 박스에 넣어지는 것은 동일한 것이 아닙니다. 즉, 범위가 [-128,127]이 아닌 한 ==를 사용하면 false가 됩니다. 같음을 사용하면 결과는 true가 됩니다. 값이 현재 범위에 있지 않더라도 Integer를 사용하면 자동으로 unboxing되므로 128 트랩 문제가 발생하지 않으므로 7번째 실행이 true입니다.
/**解释精简一部分后
* This method will always cache values in the range -128 to 127
*/
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
설명하다:
1. IntegerCache.low의 값은 -128이고 IntegerCache.high의 값은 127입니다.
2. Integer의 valueOf 메소드에는 캐시와 동일한 캐시 배열이 저장되며 범위는 -128에서 127까지입니다.
3. 우리가 취하는 값이 [-128, 127] 사이인 경우 반환되는 값은 IntegerCache.cache 배열에 정의된 값이며 새 개체를 만들 필요가 없습니다.
4. 값이 범위를 벗어나면 새로운 객체를 생성해야 합니다. 새 객체 ==는 판단된 주소이며, 이는 판단된 객체의 값입니다.
Integer k1 = new Integer(100);
Integer k2 = new Integer(100);
System.out.println(k1==k2); // 运行结果false
System.out.println(k1.equals(k2)); // 运行结果true
참조 문서:
https://blog.csdn.net/niu_8865/article/details/110791911
https://blog.csdn.net/DianLanHong/기사/세부정보/119617352
https://blog.csdn.net/양연_/article/details/135611919