>Java >java지도 시간 >Java의 가변 객체와 불변 객체의 비교 분석

Java의 가변 객체와 불변 객체의 비교 분석

巴扎黑
巴扎黑원래의
2017-07-20 13:18:142234검색

1. 가변 객체란 무엇인가요?

StringBuiler와 같이 속성 변경 시 새 개체를 생성하지 않는 개체는 해당 개체에 저장된 문자열을 속성으로 간주할 수 있습니다. 기존 StringBuilder 개체입니다. 예, 새 개체는 없습니다.

기본 데이터 유형의 래퍼 클래스와 String 클래스를 제외한 거의 모든 클래스의 객체는 변경 가능한 객체입니다.

2. 불변 객체란 무엇인가요?

속성이 변경되면 String과 같은 새로운 객체를 생성해야 합니다. 이미 "String str='efg'"가 있습니다. 이때 다시 새로운 String을 할당합니다. 객체는 "efg"를 저장하기 위해 생성되고 str은 새로 생성된 객체를 가리킵니다.

기본 데이터 유형의 래퍼 클래스와 String 클래스의 객체는 불변 객체입니다.

3. 변경 가능한 객체와 불변 객체 선택

불변 객체는 메모리의 안정적인 영역을 나타냅니다. 참조 변수가 동일한 영역을 가리키면 해당 객체의 내용이 변경됩니다. 원본 객체의 내용을 변경하는 것이 아니라 새로운 객체를 생성하여 데이터의 안정성을 보장합니다. 따라서 데이터를 안정적으로 유지해야 하는 상황에서는 일반적으로 불변 객체가 사용됩니다.

변수 객체의 속성을 업데이트할 때 새로운 객체가 생성되지 않아 메모리 공간이 절약됩니다. 따라서 변수 객체는 카운터와 같이 속성이 자주 변경되는 상황에서 주로 사용됩니다. 따라서 통계 개체 및 통계 결과를 지도 컬렉션으로 만듭니다. 정수 객체는 불변 객체이며 통계 결과를 저장하는 데 적합하지 않습니다. 통계 결과를 저장하려면 가변 객체를 사용해야 합니다. 물론 여기서는 계산에 사용되는 int 속성이 있을 수도 있습니다. :

    public void test01() {
        String str = "abc efe hig klm nop qrs";
        String[] arr = str.split(" ");

        HashMap<String, int[]> map = new HashMap<String, int[]>();for (String x : arr) {int[] count = map.get(x);if (count != null)
                count[0]++;elsemap.put(x, new int[] { 1 });
        }
    }

불변 객체에는 여러 가지 장점이 있습니다.
1. 메모리 할당이 고정되어 확장할 필요가 없습니다.
2. 여러 복사본을 임의로 복사할 수 있으며 서로 다른 스레드 간에 잠금 및 잠금 해제가 필요하지 않습니다. 함수형 프로그래밍의 "변경되지 않은" 특성에서 "변수"입니다. 물론 코드 명확성 등과 같이 함수형 프로그래밍이 옹호하는 다른 이점도 있지만 이는 의견의 문제입니다.

위 내용은 Java의 가변 객체와 불변 객체의 비교 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.