[Java] 6.2.2 String 클래스의 비교

Java 언어에서 == 연산은 기본 형식은 갖고 있는 값의 일치 여부를 반환하며 클래스 형식은는 같은 개체를 참조하는지 여부를 반환합니다.

예를 들어 정수 형식 변수 i1과 i2가 있을 때 == 연산의 결과는 값이 같은지 여부입니다.

int i1= 3;
int i2= 3;
System.out.print("i1==i2:");
System.out.println(i1==i2);

사용자가 정의한 클래스 형식을 == 연산으로 비교할 때는 같은 개체를 참조하는지 여부를 반환합니다.

MyClass mc1 = new MyClass(1);
MyClass mc2 = new MyClass(1);
MyClass mc3 = mc1;

위의 코드에서는 같은 값을 갖는 MyClass 형식 개체 두 개 생성하여 mc1과 mc2 변수에 대입하고 mc1이 참조하는 개체를 mc3 변수도 참조하게 대입하였습니다. 이 때 mc1과 mc2를 == 연산으로 비교하면 값은 갖지만 다른 개체이므로 false를 반환합니다. 물론 mc1과 mc3는 같은 개체를 참조하므로 == 연산으로 비교한 결과는 true입니다.

System.out.print("mc1==mc2:");
System.out.println(mc1==mc2);
System.out.print("mc1==mc3:");
System.out.println(mc1==mc3);

String 클래스 형식은 == 연산으로 비교할 때는 기본 형식처럼 같은 값인지 여부를 반환합니다.

String str1 = new String("1");
String str2 = new String("1");
String str3 = str1;

위는 “1” 문자 집합을 갖는 두 개의 String 개체를 생성하여 str1변수와 str2 변수에 대입하였습니다. 그리고 str1을 str3변수에 대입하여 같은 개체를 참조하게 하였습니다. String 형식도 클래스 형식이므로 str1과 str2를 == 연산으로 비교하면 문자 집합체가 같지만 다른 개체이므로 false를 반환하고 str1과 str3를 == 연산으로 비교하면 true를 반환합니다.

다음 예는 기본 형식과 개발자가 정의한 클래스 형식 및 String 형식을 == 연산으로 비교한 결과를 확인하는 예제입니다.

//사용자 정의 클래스
public class MyClass {
	int value;
	public MyClass(int value){
		this.value = value;
	}
}
//비교 연산자 사용 예
public class Program {
	public static void main(String[] args){
		//기본 형식 비교
		int i1= 3;
		int i2= 3;
		System.out.print("i1==i2:");
		System.out.println(i1==i2);
		
		//일반 클래스 형식 비교
		MyClass mc1 = new MyClass(1);
		MyClass mc2 = new MyClass(1);
		MyClass mc3 = mc1;
		System.out.print("mc1==mc2:");
		System.out.println(mc1==mc2);
		System.out.print("mc1==mc3:");
		System.out.println(mc1==mc3);
		
		//String 클래스 형식 비교
		String str1 = new String("1");
		String str2 = new String("1");
		String str3 = str1;
		System.out.print("str1==str2:");
		System.out.println(str1==str2);
		System.out.print("str1==str3:");
		System.out.println(str1==str3);	
	}
}

실행 결과

i1==i2:true
mc1==mc2:false
mc1==mc3:true
str1==str2:false
str1==str3:true