Hyogi's Notebook

Day02 [예제] 문자열 동등성 비교의 결과차이

by 효기’s

package test;

public class study03 {

	public static void main(String[] args) {
		
		
//		String str1 = "Superman";
//		String str2 = "Superman";
		
		String str1 = new String("Superman");
		String str2 = new String("Superman");
		
		if(str1.equals(str2)) {
			System.out.println("Same");
			
		}else {
			System.out.println("diff");
			
		}
		
		if(str1 == str2){
			System.out.println("Same");
			
		}else {
			System.out.println("diff");
		}
	}

}

Q. 주석처리한 부분은 결과값이 Same, Same 으로 나오지만

주석처리되지 않는 부분은 Same, diff 값을 출력하는 이유를 설명해줘


위 코드에서 주석 처리된 부분은 `String str1 = "Superman";`과 `String str2 = "Superman";`라는 두 개의 문자열을 생성합니다. 이 경우에는 문자열 리터럴을 사용하여 문자열을 생성했기 때문에 동일한 문자열 리터럴을 가리키는 같은 주소를 참조하게 됩니다. 따라서 `str1`과 `str2`는 같은 객체를 참조하게 되므로 `str1.equals(str2)`와 `str1 == str2` 모두 true를 반환합니다. 따라서 "Same"이라는 결과가 출력됩니다.

하지만 주석 처리되지 않은 부분에서는 `String str1 = new String("Superman");`과 `String str2 = new String("Superman");`라는 문자열을 생성합니다. 이 경우에는 `new` 키워드를 사용하여 명시적으로 새로운 문자열 객체를 생성하게 됩니다. 따라서 `str1`과 `str2`는 각각 다른 객체를 참조하게 되므로 `str1.equals(str2)`는 true를 반환하지만 `str1 == str2`는 false를 반환합니다. 따라서 "Same"과 "diff"라는 결과가 출력됩니다.

 

'Studying > JAVA' 카테고리의 다른 글

Day05 JAVA Studying  (0) 2023.07.07
Day04 JAVA Studying  (0) 2023.07.06
Day03 JAVA Studying  (0) 2023.07.05
Day02 JAVA Studying  (0) 2023.07.04
Day01 JAVA Studying  (0) 2023.07.04

블로그의 정보

감성 개발자 효기

효기’s

활동하기