본문 바로가기



프로그래밍/JAVA

[JAVA] 리터럴 상수중 String의 특징(equals사용)

String 문자열 리터럴의 특성 - String 리터럴 상수는 다른 상수와 달리 참조타입의 클래스에 속해있는 구조를 가지고있어서 객체를 다룰때와 같은 용법을 사용해야 합니다. 이는 기본타입의 데이터형과는 달리 직접적인 연산 비교식(==, -등)을 사용할 수 없다는 것으로 보면 됩니다.


public class StringHeapNewString {

	public static void main(String[] args) {
		
		String a = "A";
		String b = new String("A");
		String c = "A" ;
		
		boolean same_Object  = a.equals(b);
		
		if(same_Object) {
			System.out.println("a와 b객체 내용이 같습니다.");
		}
		else {
			System.out.println("a와 b객체 내용이 다릅니다.");
		}
		
		if (a == b ) {
			System.out.println("a와 b 참조객체가 같습니다.");
		}else {
			System.out.println("a와 b 참조객체가 다릅니다. ");
		}
		
		
		boolean same_Object_AWithC = a.equals(c);
		if(same_Object_AWithC) {
			System.out.println("a와 c의 객체내용이 같습니다. ");
		}
		else {
			System.out.println("a와 c객체 내용이 다릅니다.");
		}
		
		if (a == c ) {
			System.out.println("a와  c 참조객체가 같습니다.");
		}else {
			System.out.println("a와 c 참조객체가 다릅니다. ");
		}
	}
}

위의 예시와 같이 a==b의 연산식으로 비교하면 당연히 다르다고 나옵니다. 서로 다른 객체로 배정되어있기 때문입니다. 이럴때는 equals를 사용해서 비교합니다. 반대로 a와 c의 경우를 보면 new를 사용해 객체를 새롭게 생성시키지 않으면 같은 리터럴(상수값)은  같은객체를 참조(공유)하게 된다는것을 실행해보면 알 수 있습니다.  이처럼 String은 여러부분에 걸쳐서 작동하기 때문에, 직접 마음에드는 코드를 생성해서 비교해보아가면서 하는것을 추천드리겠습니다.