본문 바로가기

콤퓨타/Programming) 왕초보 자바

21. (Loops and Conditions) The String Equals Method

String Equals Method

문자열을 비교할 때에는 equals equals == 대신 실제 equals 메서드를 사용해야된다.

(리터럴 일 경우)  == 가 문제 없는 결과를 출력할 수도 있지만, 

사실 문자열을 비교할 때 사용하는 적절한 메서드는 equals 임. 

public class APp {

	public static void main(String[] args) {
		String text1 = "orange"; 
		String text2 = "apple";
		String text3 = "apple"; 
		
		 System.out.println(text1 == text2);
		 System.out.println(text2 == text3);

		 //아래 코드와 기능이 똑같다? 
		 System.out.println(text1.equals(text2));
		 System.out.println(text2.equals(text3));
		 
	}
}

 

 text1, text2, text3을 구분하는데 

== 와 

equals 메서드를 사용했다. 

System.out.println(text1.equals(text2)); 

 

여기서 text1이, text2 에게 euquals의 메서드를 시키는 것이라고 한다. 

메서드는 그럼 동사라고 이해하면 되나...? ㅎ

 

 

늘 그렇듯 초보자 선에서 배우는 내용들은 다른점을 전혀 구분할수도 없고, 그 예제들 또한 매우 단순하여 직접 작성할 때 구분할 필요성에 대해 잘 이해하지 못한다. (이 경우에도, 문자열이 리터럴일 경우에는 == 를 사용할 수 있다고 하지만, 리터럴이 무슨말인지 모르겠는 나는 보초 ^^) 

 

그래서 오늘도 열일하는 챗지피티씨에게... 물어봤다.

이거 기본 예제 말고 그래도 다른점을 볼 수 있게 코드 한번 짜줘 한번 따라 써볼게. 

 

public class Practice_01 {

	public static void main(String[] args) {
		
		
		String literal1 = "banana"; 
		String literal2 = "banana"; 
		
		String object1 = new String("banana");
		String object2 = new String("banana"); 
		
		System.out.println("----비교체험 극과극----");
		
		System.out.println("literal1 == literal2 : " + (literal1 == literal2));
		System.out.println("literal1 == object2 : " + (literal1 == object1));
		System.out.println("object1 == object2 : " + (object1 == object2));
		
		System.out.println("\nequals() 비교");
		System.out.println("literal1.equals(literal2): " + literal1.equals(literal2));
		System.out.println("literal1.equals(object2): " + literal1.equals(object2));
		System.out.println("object1.equals(object2): "+ object1.equals(object2));
		
	}
	
}

 

간단해보여도 챗지피티가 짜준건 정말 최고다. 쓰다보면 어떻게 다른지 대번에 보이거나 아니면 최소한 유추할 수 있다. 

생큐 ai... 생큐 생큐...

동일한 내용인데도 값이 다르게 나온다. 

 

literal은 ==과 "큰 따옴표"를 써서 직접적으로 assign 한 값이다. 

이런 literal은 String Pool에 저장된다. 그래서 한 번 쓴 애는 String Pool 에서 꺼내오면 되므로 두번 쓰지 않는다. 

즉, 아래의 두개 바나나는 literal1과 literal2에 assign 되었지만 결국 갸는 갸라는 의미 

String literal1 = "banana";

String literal2 = "banana";

 

 

하지만 아래에 쓰인 바나나들은 다르다. 

literal 하게 저장된게 아니라, new 라는 키워드로 생성되는 객체 라고 한다. 그래서 String Pool에 저장되는것이 아니라 Heap 에 저장된다고. 

new 라는 키워드로 생성할 때 마다 새로운 객체로 구분된다. 그래서 저 banana와 이 banana는 서로 다른 바나나다. 동명이인이라고 보면 되지 않을까? 

String object1 = new String("banana");
String object2 = new String("banana");

 

 

여튼 오늘도 챗지피티씨의 도움을 받아 잘 공부한 것 같다.. 

코드 공부하는거 재밌기는 한데, 너무 집중도가 떨어진다. 

어떻게 좀 딱 잡고 할 수는 없을까.. (지금 발등에 불 떨어진 1인 😂😂😂😂)

 

뭐가됐든일단... 해피코딩 ^^