Chapter 03 연산자(Operator)
4. 비교 연산자
비교 연산자는 두 피연산자를 비교하는데 사용되는 연산자다. 주로 조건문과 반복문의 조건식에 사용되며, 연산결과는 오직 true
와 false
둘 중의 하나이다.
비교 연산자 역시 이항 연산자이므로 비교하는 피연산자의 타입이 서로 다른 경우에는 자료형의 범위가 큰 쪽으로 자동 형변환하여 피연산자의 타입을 일치시킨 훼 비교한다는 점에 주의해야한다.
두 피연산자의 값의 크기를 비교하는 연산자이다. 참이면 true
를, 거짓이면 false
를 결과로 반환한다. 기본형 중에서는 boolean
형을 제외한 나머지 자료형에 다 사용할 수 있지만 참조형에는 사용할 수 없다.
두 피연산자의 값이 값은지 또는 다른지 비교하는 연산자이다.
대소비교 연산자와 달리 모든 자료형에 사용할 수 있다. 기본형의 경우 벼수에 저장되어 있는 값이 같은지를 알 수 있고, 참조형의 경우 객체의 주소값을 저장하기 때문에 두 개의 피연산자(참조변수)가 같은 객체를 가리키고 있는지를 알 수 있따.
기본형과 참조형은 서로 형변환이 가능하지 않기 때문에 등가비교 연산자로 기본형과 참조형을 비교할 수 없다.
두 문자열을 비교할 때는, 비교 연산자 ==
대신 equals()
라는 메서드를 사용해야 한다.
비교 연산자는 두 문자열이 완전히 같은 것인지 비교할 뿐이므로, 문자열의 내용이 같은지 비교하기 위해서는 equals()
를 사용하는 것이다. equals()
는 비교하는 두 문자열이 같으면 true
를, 다르면 false
를 반환한다.
String str = new String("abc");
// equals()는 두 문자열의 내용이 같으면 true, 다르면 false
boolean result = str.equals("abc"); // 내용이 같으므로 result에 true가 저장됨
원래 String
은 클래스이므로, 아래와 같이 new
를 사용해서 객체를 생성해야한다.
String str = new String("abc"); // String클래스의 객체를 생성
String str = "abc"; // 위의 무장을 간단히 표현
public class OperatorEx23 {
public static void main(String[] args) {
String str1 = "abc";
String str2 = new String("abc");
System.out.printf("\"abc\"==\"abc\" ? %b%n", "abc"=="abc");
System.out.printf("str1==\"abc\" ? %b%n", str1=="abc");
System.out.printf("str2==\"abc\" ? %b%n", str2=="abc");
System.out.printf("str1.equals(\"abc\") ? %b%n", str1.equals("abc"));
System.out.printf("str2.equals(\"abc\") ? %b%n", str2.equals("abc"));
System.out.printf("str2.equals(\"ABC\") ? %b%n", str2.equals("ABC"));
System.out.printf("str2.equalsIgnoreCase(\"ABC\") ? %b%n", str2.equalsIgnoreCase("ABC"));
}
}
str2
와 "abc"
의 내용이 같은데도 ==
로 비교하면, false
를 결과로 얻는다. 내용은 같지만 서로 다른 객체라서 그렇다.
그러나 equals()
는 객체가 달라도 내용이 같으면 true
를 반환한다. 그래서 문자열을 비교할 때는 항상 equals()
를 사용해야한다.
만일 대소문자를 구별하지 않고 비교하고 싶으면, equals()
대신 equalsIgnoreCase()
를 사용하면 된다.
📑 원본 자료
- Java의 정석(3판) [남궁 성/도우출판/2016]