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