Integer 자물쇠 만들기
1 자물쇠가 비어있으면 안 된다. 즉, 자물쇠의 대상이 비어있으면 안 된다. 이런 오류는 쉽게 드러나 일반적으로 피할 수 있다.
2 자물쇠는final이어야 한다. 여기는 자물쇠로 사용할 대상의 인용을 반드시final로 명시해야 하는 것이 아니라 한 대상이 자물쇠로 사용할 경우 그 인용은 수정된 지향이 존재하지 말아야 한다. 그렇지 않으면 인용 지향이 바뀌고 대상 자물쇠도 바뀌며 자물쇠가 효과가 없을 수 있다.
두 번째에 대해 우리는 대상 자물쇠의 인용 성명을final로 표시하여 문제를 피할 수 있다.그 밖에 주의해야 할 것은 만약에 기본 데이터 형식의 봉인 유형, 예를 들어 Integer, Long 등 대상을 자물쇠로 사용할 때 반드시 매우 조심해야 한다. 이런 인용에 대한 값 부여 작업은 일부 상황에서(상량 탱크의 요소) 사실상 다시 가리키는 동작을 인용하면 자물쇠가 효력을 잃게 된다. 이때:
Integer i = 7;
... 과 같다
Integer i = new Integer(7);
i가 가리키는 대상을 인용하는 것은 새로운 대상입니다.
... 에 이르다
Integer i = 7;
Integer j = 7;
i와 j는 같은 대상입니까?윗글의 해석에 따르면 아니, 실제로 i와 j는 같은 대상이기 때문에 윗글의 묘사는 정확하지 않다.
JVM의 일부 최적화를 바탕으로 String 문자열 풀처럼 메모리를 절약하기 위해 JVM은 작은 범위 내의 Integer 값을 하나의 대상 풀에 넣을 수 있다. 이 범위는 -127~127(검증 대기)일 수 있다. 만약에 직접 값을 부여하는 방식으로 Integer 대상을 만들면 값도 대상 풀 범위 안에 있고 JVM은 대상 풀에서 대상을 직접 되돌려주고 메모리로 새로운 대상을 만들지 않는다.따라서 메모리를 절약하는 목적을 달성할 수 있다.
package com.dancen.test;
public class IntegerDemo
{
public static void main(String[] args)
{
Integer a = 1000;
Integer b = 1000;
System.out.println(a == b);
// false, 1000 JVM Integer
Integer c = 10;
Integer d = 10;
System.out.println(c == d);
// true, Integer
Integer e = new Integer(10);
Integer f = new Integer(10);
System.out.println(e == f);
// false, ,
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.