1. 이 질문에는 여러 측면이 포함될 수 있습니다. 제가 직접 연구하고 일부 이해했지만 일부 부분은 여전히 불명확합니다. 먼저 코드를 붙여넣으세요(Java 버전 1.8):
으아악2. 먼저 명확하게 알고 있는 내용부터 말씀드리겠습니다. 4번째 출력과 8번째 출력은 비교적 명확합니다. 이는 일반적으로 사용되는 기본 데이터 유형 리터럴을 저장하기 위한 상수 풀이 Java 힙에 있기 때문입니다. 이 상수 풀은 정수(-128 ~ 127) 및 부울 유형(이중 유형 없음)을 저장할 수 있습니다. "Integer abd1=127"을 실행할 때 힙에 값 127을 갖는 Integer 객체를 생성하는 것 외에도 해당 상수 풀에 127을 저장한 다음 이 Integer 객체를 상수 풀의 127과 연결합니다. "Integer abf1=127"이 다시 실행되고, 객체를 생성하는 것 외에도 상수 풀의 127과 연결되므로 두 비교가 true를 반환합니다. 128은 다릅니다. 상수 풀의 저장 범위를 초과하므로 두 개의 정수 참조 i1과 i2만 비교되므로 false가 반환됩니다.
3. 내 질문은: 개체 멤버 변수에 int 유형(비정적, 비최종)을 저장하는 방법입니다. 즉, Text 객체 t가 생성되면 abc1(이와 유사한 abc2)이 스택에 직접 저장됩니까, 아니면 패키지되어 힙에 저장됩니까? 반환값은 " 참, 거짓, 참' 상황.
int가 Integer와 비교되면 Integer가 자동으로 unboxing되고 int와 비교됩니다.
두 번째 객체의 인스턴스 변수는 힙에 할당됩니다.
1과 5는 Integer 유형이 자동으로 unboxing되므로 비교됩니다. 따라서 이는 사실입니다.
new Integer(xxx) xxx는 캐시에도 있습니다. 새 객체도 범위 내에서 생성되므로 2는 false입니다.