equals()란 매개변수로 객체의 참조변수 를 받아서 비교하여
그 결과를 boolean(true or false) 값으로 알려 주는 역할을 합니다.
[참조 타입(Reference type) 변수]
기본 타입을 제외하고 배열, 열거, 클래스, 인터페이스 등을 말한다.
참조 타입의 변수에는 객체(메모리)의 번지(주소)가 저장된다.
public static void main(String[] args){
public static void main(String[] args){
String a = "hello";
String b = "hello";
String c = "hi";
String p1 = new String("man");
String p2 = new String("woman");
String p3 = new String("man");
System.out.print(p1==p2); //false
System.out.print(p1==p3); //false
System.out.print(a==b); //true
System.out.print(a==c); //false
System.out.println("(주소값이 다르기 때문에 false)");
System.out.println("(주소값이 다르기 때문에 false)");
System.out.println("(JVM이 자동으로 같은 값을 인지해서 참조값(주소값)을 같게 설정해주기 때문에 true - String pool)");
System.out.println("(값이 다르기 때문에 참조값이 연결이 되지 않아서 false)");
}
}
위에서 보신것과 같이 ==, != 연산자는 String의 값(value)을 비교하지 않고
그 참조값을 비교하기 때문에 해당 객체의 값을 비교해주는 equals()메소드를 사용해야합니다.
public static void main(String[] args){
String a = "hello";
String b = "hello";
String c = "hi";
String p1 = new String("hello");
String p2 = new String("woman");
String p3 = new String("hello");
// equals() 메소드는 값을 비교하기 때문에 아래와 같은 결과를 얻을 수 있습니다.
System.out.println(a.equals(b)); //true
System.out.println(a.equals(c)); //false
System.out.println(a.equals(p1)); //true
System.out.println(p1.equals(p2)); //false
System.out.println(p1.equals(p3)); //true
}
2번에서 보신 예제와는 다르게 equals메소드는 참조값이 아니라 해당 변수 혹은 객체의 값(Value)를 가지고 비교를 하기 때문에 위와 같은 결과를 보여주게 됩니다.