일반적으로 두 개의 객체 참조가 동일한 객체를 가리키는 지 테스트 할 수있는 충분한 이유가 있습니다. 내가 쓴 많은 시간을 보냈습니다
Address oldAddress;
Address newAddress;
... populate values ...
if (oldAddress==newAddress)
... etc ...
이 경우 등가 함수가 있거나 없을 수 있습니다. 내가하면 equals 함수는 두 객체의 전체 내용을 비교할 수 있습니다. 종종 일부 식별자를 비교합니다. "A와 B는 같은 객체에 대한 참조"와 "A와 B는 같은 내용을 가진 두 개의 다른 객체"는 물론 두 가지 매우 다른 아이디어입니다.
Strings와 같은 불변의 객체의 경우 이것은 문제가되지 않습니다. 불변의 객체를 사용하면 객체와 값이 같은 것으로 생각하는 경향이 있습니다. 글쎄, "우리"라고 할 때, 나는 적어도 "I"를 의미합니다.
Integer three=new Integer(3);
Integer triangle=new Integer(3);
if (three==triangle) ...
물론 그것은 거짓을 반환하지만, 그것이 사실이라고 생각하는 누군가를 볼 수 있습니다.
그러나 ==는 일반적으로 객체의 내용이 아닌 참조 핸들을 비교한다고 말하면 문자열에 특별한 경우를 만드는 것은 혼란 스러울 수 있습니다. 여기 다른 누군가가 말했듯이 두 String 객체의 핸들을 비교하려면 어떻게해야합니까? 문자열에만 사용할 수있는 특별한 기능이 있습니까?
그리고 어쩌면 ...
Object x=new String("foo");
Object y=new String("foo");
if (x==y) ...
그것들이 두 개의 다른 객체이기 때문에 거짓입니까, 아니면 내용이 동일한 문자열이기 때문에 참입니까?
예, 프로그래머가 어떻게 혼란스러워하는지 이해합니다. 내가 직접했다, 만약 내가 myString.equals ( "foo") 경우 의미 myString == "foo"경우 쓰기를 의미합니다. 그러나 모든 객체에 대해 == 연산자의 의미를 다시 디자인하지 않으면 해결 방법을 알 수 없습니다.
==
객체 평등이고eq
참조 평등 인 ( ofps.oreilly.com/titles/9780596155957/… ) Scala를보고 싶을 것 입니다.