[Java] equals 메서드 (변수 위치, ==과의 차이)
equals 함수는 객체를 비교하는 함수입니다.
기본 데이터타입은 비교할 수 없습니다.
링크에서 기본 데이터타입에 대하여 알아보아요!
이제 본론으로 돌아가보겠습니다.
equals 함수
예시를 보면서 알아보겠습니다.
public class EqualsTest {
public static void main(String[] args) {
String str = "호소세";
String str2 = "호소세";
String str3 = "호소세지";
System.out.println(str.equals(str2)); //true
System.out.println(str3.equals(str2)); //false
System.out.println("호소세".equals(str2)); //true
}
}
뭐 equals의 사전적 의미를 보면 무엇을 하는 함수인지 알 수 있습니다.
객체의 값이 같으면 true를 반환하고 다르면 false를 반환합니다.
public class EqualsTest {
int num = 1;
int num2 = 2;
System.out.println(num.equals(num2)); //에러
}
}
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Cannot invoke equals(int) on the primitive type int
기본형으로 해서 돌리면 이러한 에러가 발생합니다.
❤중요 체크 사항
제가 프로젝트를 하면서 equals 에서 가장 중요하게 생각하는 것은 바로 parameter의 순서입니다.
이것이 무엇이냐하면 예시로 보여드리겠습니다.
public class EqualsTest {
public static void main(String[] args) {
String str = "호소세";
System.out.println("호소세".equals(str)); //true
System.out.println(str.equals("호소세")); //true
}
}
이렇게 들어가면 잘 동작합니다.
하지만 str에 null 값이 들어가게 되면 에러가 발생합니다.
public class EqualsTest {
public static void main(String[] args) {
String str = null;
System.out.println("호소세".equals(str)); //false
System.out.println(str.equals("호소세")); //에러
}
}
이렇게 되면 만약에 str의 값을 다른 곳에서 가져오는데 그 값이 null 값이 돼버리면 동작하지 않고 에러가 발생하게 됩니다.
따라서 앞에서 비교할 String은 절대 null 값이 들어올 수 없는 값으로 해야하고,
만일 null이 되는 값을 넣어야 하는 상황이 되면 조건문으로 처리를 해야 합니다.
==과 equals의 차이
== 연산자
- == 연산자는 두 객체의 참조가 동일한지를 비교합니다.
- 즉, 두 객체가 메모리 상에서 동일한 위치를 참조하는지를 확인합니다.
- 기본 타입 (int, char, boolean 등)의 경우 값 비교를 수행합니다.
public class EqualsTest {
public static void main(String[] args) {
String str1 = "test";
String str3 = new String("test");
System.out.println(str1==str3); //false
}
}
이렇게 하면 true가 나올 것 같지만 false 가 나오게 됩니다.
이유는 객체의 주소값을 비교하기 때문입니다.
이런 식으로 객체의 주소값이 다르기 때문에 == 코드는 false의 값을 나타내게 됩니다.
소감
오래간만에 글을 작성하게 되었는데 여러분들에게 도움이 될 생각을 하니 기쁩니다.
요새 좀 많이 바빴는데 그간에 느낀 점은 인간관계에 있어 우선순위가 뭔지를 확실히 잘하자입니다.
중요한 것을 먼저로 하여 인생을 살아가다 보면 자신의 삶도 행복해지는 것 같더라고요.