언어 자료구조 알고리즘/디딤돌 Java 언어 Part1

[Java] 6.2.2 String 클래스의 비교

언제나휴일 2016. 11. 16. 20:36
반응형

출간일 2016년 11월 28일

판매가 2000원

형태 ebook


이 책의 모든 내용은 http://ehpub.co.kr에 공개하고 있습니다.

학습에 도움이 되시면 ebook을 구입하여 소장하시면 감사하겠습니다.

언제나 휴일 출판사의 수익금의 대부분은 아프리카에 기부하고 있습니다.



 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

[소스 6.4] 비교 연산자 사용 예

 

 그런데 실제 프로그래밍에서 서로 다른 개체이지만 String 개체의 값인 문자 집합체가 같은지 비교하고 싶을 때가 많습니다. 이 때는 equals 메서드를 이용하면 서로 다른 개체여도 값인 문자 집합체가 같은지 여부를 확인할 수 있습니다.

 

 다음 예제는 == 연산과 equals 메서드로 문자열을 비교하는 예제입니다.

 

//String 형식을 비교 연산자와 equals 메서드로 비교

public class Program {

        public static void main(String[] args){

               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);

              

               System.out.print("str1.equals(str2):");

               System.out.println(str1.equals(str2));

               System.out.print("str1.equals(str3)");

               System.out.println(str1.equals(str3));

        }

}

str1==str2:false

str1==str3:true

str1.equals(str2):true

str1.equals(str3)true

[소스 6.5] String 형식을 비교 연산자와 equals 메서드로 비교 예


[Java] 6.2.3 String 클래스의 비교에서 자주하는 실수


반응형