코딩테스트에도 문자열의 비교는 자주 활용되기 때문에 따로 정리를 하게 되었습니다.
이 내용을 몰랐을때 자연스럽게 '==' 연산자를 비교하려는데 값이 같은데 다르다고 출력이 되서 당황한 적이 있습니다.
우선 String 변수를 생성할때는 리터럴을 이용한 방식과 new 를 이용한 방식이 있습니다.
1. 리터럴을 이용한 방식은 string constant pool 이라는 영역에 선언한 문자열이 이 주소값을 가집니다.
String str1 = "ddinguBlog";
String str2 = "ddinguBlog";
위 같은 선언은 같은 주소를 가르키기 때문에 '==' 연산자를 사용해도 같다고 출력이 됩니다.
2. new 를 이용하게 되면 '==' 연산자로는 비교를 할 수 없습니다.
String str = "ddinguBlog";
String str2 = new String("ddinguBlog");
그래서 두 문자열을 비교할 때 비교 연산자인 '==' 대신에 equlas( ) 라는 메서드를 사용해야 합니다.
'==' 연산자는 주소값을 비교하기 때문에 값을 같게 선언해도 가르키는 메모리의 주소가 다르면 다르다고 출력하게 됩니다.
'==' 연산자 사용
public class StringExam {
public static void main(String[] args) {
String str = "ddinguBlog";
String str2 = new String("ddinguBlog");
if (str == str2) {
System.out.println("같다!");
}else{
System.out.println("다르다!");
}
}
}
출력 : 다르다!
반면에 equlas( ) 메서드는 객체가 달라도 문자열의 내용이 같으면 true를 반환 합니다.
그래서 문자열을 비교할 때는 equlas( )를 사용해야 합니다!
만약 대소문자를 구별하지 않고 비교하고 싶으시면, equalsIgnoreCase( ) 를 사용하면 됩니다.
'equals( )' 메서드 사용
public class StringExam {
public static void main(String[] args) {
String str = "ddinguBlog";
String str2 = new String("ddinguBlog");
if (str.equals(str2)) {
System.out.println("같다!");
}else{
System.out.println("다르다!");
}
}
}
출력: 같다!
'equalsIgnoreCase( )' 메서드 사용
public class StringExam {
public static void main(String[] args) {
String str = "ddinguBlog";
String str2 = new String("DdInGuBloG");
if (str.equalsIgnoreCase(str2)) {
System.out.println("같다!");
}else{
System.out.println("다르다!");
}
}
}
출력: 같다!
'자바 (ref. 자바의정석)' 카테고리의 다른 글
배열의 복사 - JAVA (0) | 2022.02.08 |
---|---|
for each 문 - JAVA (0) | 2022.02.07 |
상수와 리터럴 - JAVA (0) | 2022.02.05 |
변수란? - JAVA (0) | 2022.02.04 |
자바언어의 특징 (0) | 2022.02.04 |