2013-03-13 2 views
0

나는 자바 문자열이 불변 일 수 없다는 말을 듣고 나는 불변의 문자열 외에 다른 객체가 있는지 궁금해했다.Java에서 문자열 외에 변경 불가능한 객체가 있습니까?

메모에서 C++의 문자열도 변경되지 않습니까?

+3

예, Java에는 많은 불변 개체가 있습니다. 독자가 일부를 찾아서 * 만들도록 연습으로 남겨 두겠습니다. 그리고 C++ String은 변경되지 않습니다. 그것들은 단순히 char 배열입니다. –

+0

안녕하세요 호버 크래프트. 와우 거기에 다른 불변의 물건이 있다는 것에 놀랐습니다. 좋아, 나는 일부를 발견하거나 학습 운동으로 일부를 만들 것이다. – user983246

+0

놀랄만한 것은 없습니다. 왜 이렇게 많은 것들이 있는지에 대한 매우 좋은 이유가 있습니다. 그리고 당신이 정말로해야 할 일은 왜 불변 객체가 왜 매력적인지, 그들의 이익이 정확히 무엇인지를 알아내는 것입니다. –

답변

3

많은 기본 유형은 변경 가능하지 않습니다 (정수, Long, 부울 등). 불변성은 자바에서 명시 적으로 언급 한 것이 아니며, 의미 론적 계약이다. 어떤 클래스도 final로 멤버를 선언하고, 생성시 할당하고, 클래스의 공용 인터페이스를 통해 액세스를 잠그면 모든 클래스를 불변으로 만들 수 있습니다.

C++의 문자열은 0 문자로 끝나는 문자 배열입니다. 그게 전부 야. const를 사용하면 액세스를 잠그는 데 도움이되지만 불변성에 대한 약속은 없습니다.

자바의 많은 부분은 변경 가능하지 않지만 설명서와 소스 만이 실제로이 사실을 증명할 수 있다고 생각합니다.

+4

"string"은 많은 구현이있는 C++의 개념이다. 널 종료. 자열은 영. 자로 끝나는 문자 배열입니다. 또한 std :: string','std :: wstring','CString','_bstr_t', QString', 5 개의 문자열 리터럴,'string_ref' ... –

+0

포인트가 찍히고, C++ 지식이 내 대학 시절. –

+0

그러나 새로운 값을 지정하면 프리미티브의 값을 변경할 수 있습니까? 어떻게하면 프리미티브가 변경되지 않는지 나는 알 수 없다. – user983246

1

박스형 프리미티브 (예 : Integer)는 모두 변경할 수 없습니다.

직접 변경할 수없는 클래스를 만들 수 있습니다. 예를 들어 생성자를 사용하여 변수를 설정하고 공용 변수 나 설정자가없는 클래스를 만들 수 있습니다.

+0

박스로 무엇을 의미합니까? – user983246

+0

@ user983246, http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html을 참조하십시오. – Patashu

관련 문제