문자열을 키보드로 받아 글자수를 출력하는 프로그램 작성
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("종료");
}