Develop/Java

String 값을 equals를 사용하여 비교하기 ('=='를 쓰지 않는 이유)

롱하 2024. 6. 17. 11:33

System.out.println를 사용하여 값 두가지를 찍어 봤는데 값의 내용이 동일했지만 '=='을 사용했을때 제대로 작동하지 않았다. >> Stirng 타입은 값을 비교해줄때  equals를 사용해야한다. 왜냐면 메모리까지 비교를 하기 때문이다.

dto.getCreatedById().getClass();
memberDto.getMemberId().getClass();

if(dto.getCreatedById() == null || memberDto.getMemberId() == null || !dto.getCreatedById().equals(memberDto.getMemberId())) {
    commonUtil.getJsonScriptMessage(messageUtil.getMessage("operation.application.error.done"), "alert", null, redirectAttributes);
    return "redirect:/branch/application/etc/"+etcType+"/result";
}

 

* 참고 : getClass()는 타입을 가져오는 메서드

 

## 왜 String값을 비교할때는 equals를 쓰는걸까?

 

> 문자열을 비교할 때 == 연산자는 두 객체의 참조(reference)를 비교하는 반면, equals 메서드는 두 객체의 실제 내용을 비교하기 때문이다.

 

 

  • == 연산자:
    • == 연산자는 두 객체가 동일한 메모리 위치를 가리키는지 비교합니다.
    • 즉, 두 객체의 참조(reference)가 같은지 비교합니다.
  • equals 메서드:
    • equals 메서드는 두 객체의 실제 값이 같은지 비교합니다.
    • 문자열의 경우, 두 문자열이 동일한 내용을 가지고 있는지 비교합니다.

- 예시 -

String str1 = new String("hello");
String str2 = new String("hello");

if (str1 == str2) {
    System.out.println("str1 and str2 are the same reference");
} else {
    System.out.println("str1 and str2 are different references");
}

if (str1.equals(str2)) {
    System.out.println("str1 and str2 have the same content");
} else {
    System.out.println("str1 and str2 have different content");
}

 

 

출력

str1 and str2 are different references
str1 and str2 have the same content

요약:

  • 참조 비교: == 연산자는 두 객체가 동일한 객체인지(동일한 메모리 위치를 가리키는지) 비교한다.
  • 내용 비교: equals 메서드는 두 객체의 실제 내용을 비교한다.

따라서, 문자열의 내용이 같은지를 확인하기 위해서는 equals 메서드를 사용하는 것이 올바른 방법이다.

== 연산자는 문자열이 동일한 객체인지 확인할 때 사용하지만, 이는 대부분의 경우 우리가 원하는 비교 방식이 아니기 때문이다. 예를 들어, 두 문자열 변수가 동일한 내용을 가지고 있더라도 서로 다른 객체일 수 있기 때문에, == 연산자는 이러한 경우에 false를 반환하게 된다.

결론적으로, 문자열의 내용이 같은지를 확인하려면 equals 메서드를 사용해야 한다.