assertEquals
equals
비교 방법을 사용합니다 . 연산자 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
가 예상보다 자주 반환 합니다.