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 메서드를 사용해야 한다.
'Develop > Java' 카테고리의 다른 글
게시판 상세페이지에서 이전글, 다음글 구현하기 (0) | 2024.07.02 |
---|---|
[Thymeleaf] temporals.format 으로 날짜 설정하기 (0) | 2024.06.28 |
상시 게시글을 리스트의 상단으로 올리기 (0) | 2024.06.20 |
@Valid 어노테이션에 대해서 (0) | 2024.06.17 |
JAVA에서 메모리 주소를 직접 확인하는게 가능할까? (0) | 2024.06.17 |