assertEqualsequals비교 방법을 사용합니다 . 연산자 assertSame를 사용 하는 다른 assert가 있습니다 ==.
==문자열과 함께 사용해서는 안되는 이유를 이해하려면 무엇을해야하는지 이해해야합니다 ==. ID 확인을 수행합니다. 즉, a == b검사가 있는지 a및 b받는 참조 동일한 개체 . 언어에 내장되어 있으며 다른 클래스에서 동작을 변경할 수 없습니다. 반면 equals에이 메소드는 클래스에 의해 대체 될 수 있습니다. 기본 동작 ( Object클래스에서)은 ==연산자를 사용하여 ID 확인을 수행하는 것이지만을 포함하여 많은 클래스 String는이를 대신하여 "동등성"확인을 수행하도록이를 재정의합니다. 의 경우 동일한 객체를 String확인 a하고 b참조하는 대신a.equals(b) 그들이 참조하는 객체가 모두 정확히 동일한 문자를 포함하는 문자열인지 확인합니다.
유추 시간 : 각 String물체가 무언가로 쓰여진 종이 라고 상상해보십시오 . "Foo"가 적힌 종이와 "Bar"가 적힌 종이가 있다고 가정 해 봅시다. 처음 두 장의 종이를 가져 와서 ==비교하는 데 사용 하면 false본질적으로 "이 두 장의 종이입니까?"라고 묻기 때문에 반환됩니다 . 종이에 쓰여진 내용을 볼 필요조차 없습니다. 내가 한 장이 아닌 두 장의 종이를 준다는 사실은 그것을 반환한다는 것을 의미합니다 false. equals그러나을 사용 하면이 equals메서드는 두 장의 종이를 읽고 동일한 내용 ( "Foo")을 말하는 것을 확인하므로 반환 true됩니다.
문자열과 혼동되는 부분은 Java에 "인터 닝"문자열이라는 개념이 있으며 이는 코드의 모든 문자열 리터럴에서 (실제적으로) 자동으로 수행된다는 것입니다. 즉, 코드에 두 개의 동등한 문자열 리터럴이 있으면 (다른 클래스에 있더라도) 실제로는 동일한 String객체를 참조 합니다. 따라서 ==운영자 true가 예상보다 자주 반환 합니다.