2012-01-18 4 views
1

Java에는 불변의 타입이 있습니다. 그리고 메소드에 불변 객체를 전달하면, 그 메소드에서 값이 변경 되더라도 해당 메소드를 호출 한 후에 변경되지 않습니다. 나는 모든 프리미티브가 불변이라는 것을 안다. String도 변경할 수 없습니다.
자바에서 해당 기능을 확인하기위한 간단한 코드를 작성했으며 프리미티브의 래퍼 클래스도 변경할 수없는 것으로 보입니다. 아무도 자바에서 모든 불변 타입을 나열 할 수 있습니까?Java의 모든 불변의 타입

+3

프리미티브는 변경할 수 없습니다. "메소드에 전달한 후에 변경하지 않는다"는 사실은 값으로 전달 되었기 때문이며, 변경 가능하지 않기 때문이 아닙니다. – amit

+0

비슷한 질문 : http://stackoverflow.com/questions/5124012/examples-of-immutable-classes – Azodious

+0

이 목록을 알 수있는 이유는 무엇입니까? – Dapeng

답변

4

몇 가지 새로운 것들을 소개 확신

은 변경할 수 없습니다.

void change(SomeType st) { 
    st.setValue(123); 
} 

실물이 변경됩니다. 동안

void change(SomeType st) { 
    st = new SomeType(123); 
} 

하지 않습니다. 차이점은 참조를 변경하거나 참조 된 오브젝트에서 조작 중인지 여부입니다.

문자열과 해당 래퍼 클래스는 해당 개체를 변경할 수있는 setValue과 같은 멤버 함수가 전혀 없으므로 불변이라고합니다.

당신이 이것을 이해하기를 바랍니다. 의심스러운 점이 있으면 자유롭게 의견을 말하고 질문 할 수 있습니다.

+0

감사합니다. – shift66

-1

jdk에서 제공되는 모든 프리미티브 값을 보유하는 클래스는이 목록을 통과해야합니다.

예 - 정수, Long, Double, String 등입니다.

+0

자바에서는 원시 타입을 열거 할 수 있습니다 : byte, short, int, long, char, float, double, bool. 원시와 불변은 완전히 다른 두 가지입니다. – Haozhun

+0

@Gene, 당신은 진술을 오해했습니다. 모든 클래스는 원시적 인 값을 표현합니다 ... 이제 희망을 얻으십시오. –

+0

나는 아직도 당신의 요점을 얻지 못했습니다. 뭐라고 요. 그러나, downvote는 시간 초과로 인해 잠겨 있으며 지금은 변경할 수 없습니다. 죄송합니다. – Haozhun

1

아니요, 불가능합니다.

모든 사람은 자신의 불변의 유형을 추가 할 수 있습니다 그리고 난 자바의 각기 다른 버전은 그것이 값이 그 방법으로 변경된 것 경우에도 그 메소드 호출 한 후 변경되지 않습니다

+0

예, Google에서 검색했습니다. 모든 알려진 불변 유형을 알고 싶습니다. 예를 들어 Integer. 누구나이 유형을 사용할 수 있습니다. URI도 변경할 수없는 것 같습니다. 알았어? – shift66

+0

@Ademiban : 어디서 끝나요? 모두 아파치 커먼즈도 사용할 수 있지만 거기에 불변 변수도 함께 나열해야합니까?> – amit

+0

javadoc에는 이러한 모든 정보가 있습니다. URI의 javadoc :이 클래스의 인스턴스는 변경 불가능합니다. 그래서 예 URI는 변경 불가능합니다 – Peter