String ) 비교 연산자 '==', '.equals()' 차이

안씅👩🏻‍💻·2022년 9월 2일
0

문자열을 키보드로 받아 글자수를 출력하는 프로그램 작성

  • exit을 입력하면 프로그램이 종료되도록 조건문을 작성해야함.
public static void main(String[] args) {
		
		Scanner input = new Scanner(System.in);
	boolean b = true;
	
	while (b) {
		System.out.print("문자열 입력 :");
		String str = input.nextLine();
		if (str == "exit") {
			b = false;
			break;
		}else {
			System.out.println(str.length());
		}
		
	}
	System.out.println("종료");
}

다음을 출력하면 if문에서 문자열의 "exit"을 입력했을 때, 동일한 값으로 인식되지 않아, while문을 빠져나오지 않는다.

이유)
String 값은 hip메모리에 저장돼 스택에는 힙메모리 주소로 저장된다.

위 if문의 조건식 str == "exit"은 힙메모리 주소와 문자열 "exit"이 비교되어 false값을 갖는다.

  • == 비교 연산자는 같은 힙메모리 주소 값을 갖는지 비교함.

.equals()를 사용하면 내부적으로 힙메모리 주소를 비교하는 것은 갖지만, 객체와 객체를 비교할 수 있다. 즉, 입력받은 값과 문자열 "exit"을 비교 연산 할 수 있다.

해결 )
힙메모리에 저장된 문자열을 비교할 때, ==보다 .equals()를 사용하는 것이 더 정확함.

public static void main(String[] args) {

	Scanner input = new Scanner(System.in);
	boolean b = true;
		while (b) {
			System.out.print("문자열 입력 :");
		String str = input.nextLine();
		if (str.equals("exit")) {
			b = false;
			break;
		} else {
			System.out.println(str.length());
		}
		}
	System.out.println("종료");
}
profile
그냥 은근슬쩍 살다 가긴 싫어

0개의 댓글