equals 메소드와 == 연산자의 차이점
== 연산자는 주소값을 비교하여 주소값이 같으면 true, 다르면 false를 반환한다.
equals 메소드는 문자열 내용을 비교하여 문자열이 같으면 true, 다르면 false를 반환한다.
equals 메소드와 == 연산자 예제(1)
public class Ex05 {
public static void main(String[] args) {
String str1 = "abc";
String str2 = str1;
String str3 = new String("abc");
// == 연산자는 주소를 비교합니다.
System.out.println("str1 == str2 → " + (str1 == str2)); //true
// str2에 str1 값을 넣었으므로 같은 주소값을 사용하고 있어서 true
System.out.println("str1 == str3 → " + (str1 == str3)); //false
//str3은 새로운 new String으로 객체 생성,
//새로운 주소를 부여해서 주소비교로 인해 false, 둘은 서로 다른 객체이다.
//equals()는 내용을 비교합니다.
System.out.println("str1.equals(str2) → " + str1.equals(str2)); //true
System.out.println("str1.equals(str3) → " + str1.equals(str3)); //true
//equals는 주소가 아닌 내용을 비교하기 때문에 abc내용이 값으므로 true가 반환됩니다.
//문자열을 비교할 때에는 ==보다는 equals를 사용하는 것이 좋다.
}
}
위 예제와 같이 주소값을 비교하는 == 연산자와
문자열 자체를 비교하는 equals 메소드의 결과는 다르게 나온다.
문제) 사용자에게 문자열을 입력 받아 그 문자열의 길이를 출력하고, 입력한 문자열이 "exit"면 본 프로그램을 종료하도록 만들어 보자.
import java.util.Scanner;
public class Ex04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//입력값을 받아올 Scanner 클래스 변수 선언 및 초기화
while(true) { //반복문 실행
System.out.print("문자열을 입력하세요 ");
String str = sc.nextLine(); //입력받은 문자열은 str변수에 대입
if(str.equals("exit")) { //문자열 비교는 equals 사용.
//if(str == "exit") 은 주소를 비교하기 때문에 false가 나와서 반복문이 끝나지 않음.
break; //프로그램 종료
}else {
System.out.println(str.length() + "글자에요");
//str의 문자열길이를 반환하여 출력. (공백 포함됨)
}
}
System.out.println("프로그램을 종료합니다.");
sc.close(); //스캐너 사용 후 닫아주기
}
}
Scanner로 문자을 입력받고 length로 문자길이를 반환하며
equals를 통해 문자열 비교를 해 프로그램을 종료시키는 프로그램을 만들어 보았다.
이처럼 주소값이 아닌 단순 문자열 비교시에는 equals를 사용한다.
'JAVA' 카테고리의 다른 글
JAVA 메소드 오버로딩(overloading)이란? (0) | 2022.03.03 |
---|---|
JAVA 클래스와 메소드 (0) | 2022.02.28 |
JAVA 문자열 substring, index ,임의의 학번 부여, 생년월일 출력 문제 (0) | 2022.02.23 |
JAVA Random 클래스 랜덤 메소드 (랜덤 전화번호 만들기) (0) | 2022.02.21 |
[JAVA] 초를 입력 받아 시, 분, 초 출력하기 (0) | 2022.02.20 |
댓글