본문 바로가기
JAVA

JAVA 문자열비교 equals 메소드( == 연산자와 차이점) 예제/문제

by 자바비터 2022. 2. 26.

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 예제 결과 화면

 

위 예제와 같이 주소값을 비교하는 == 연산자와

문자열 자체를 비교하는 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(); //스캐너 사용 후 닫아주기
	}
}

equals 문제 결과 화면

 

Scanner로 문자을 입력받고 length로 문자길이를 반환하며

equals를 통해 문자열 비교를 해 프로그램을 종료시키는 프로그램을 만들어 보았다.

이처럼 주소값이 아닌 단순 문자열 비교시에는 equals를 사용한다.

댓글