문자열 비교 contentEquals
//문자열 자체를 비교할 때는 contentEquals 명령어를 사용한다

public class Exam_05 {
	public static void main(String[] args) {
		String a="A";
		String b="A";
		String c=new String("A");
		String d=new String("A");
		
		System.out.println(a==b);
		System.out.println(b==c);
		System.out.println(c==d);
		
		System.out.println(a.contentEquals(b));
		System.out.println(b.contentEquals(c));
		System.out.println(c.contentEquals(d));
	}
}

/*
JAVA에서 문자열간 비교를 위해서 ==을 쓰지 않는다. 
Why? 의도한 비교가 아니게됨. 문자열의 비교가 아닌 메모리의 주소를 비교하게 됨.

변수가 저장하고 있는 주소를 비교하고 싶은게 아니라, 문자열 자체를 비교하고 싶은 것
System.out.println(a.contentEquals(b)); 

  
  
(부연설명)  
String a =”A”; 스트링상수(String Literal) : 리터럴값을 직접 스트링에 넣은 것
String b =”A” // String Constant pool에서 “A”가 있는지 찾아보고, 있으면 똑같은 주소를 저장한다.

--->그러므로 System.out.println(a==b);를 실행하면 true가 출력된다. = 내부적으로 String Constant pool을 공유해서 같은 번지를 공유하기 때문에 true가 되는 것(단순히 문자가 같아서가 아님)


String c = new String(“A”); 
String d= new String(“A”);

new의 역할 : heap memory(String Constant pool이 아닌 그냥 heap에다가)에 데이터를 만들어 달라는 역할 -> instance라는 매개체를 만들고, instance를 통해 String Constant pool을 봄. 

System.out.println(b==c);   ---> 결과 : false
System.out.println(c==d);   ---> 결과 : false

다 똑같은 1000번지 A를 보고 있지만, c와 d는 new를 통해 인스턴스(매개체)를 만들어서 인스턴스의 주소를 갖고 있기 때문에 저장하고있는 주소가 다름-> 인스턴스를 통해 1000번지를 보고 있음.

*/