khseob0715   1년 전

잘 돌다가 50%되면


런타임에러로 바뀌네요

bupjae   1년 전

t == "E" 가 아니라 t.equals("E")

khseob0715   1년 전

하하.... 이클립스에서는 되던데 


왜 여기서는 안 되고 런타임 에러가 걸렸던거죠.. ㅠㅠ

bupjae   1년 전

Java 에서 문자열 비교에 == 를 쓰면 문자열이 저장된 주소를 비교하는 게 됩니다. 아마 이 결과를 의도하는 경우는 거의 없을 겁니다.

문자열이 가지고 있는 내용을 비교하고 싶으면 equals 를 써야 합니다.

 switch 문에 문자열을 사용하는 경우 자바 컴파일러가 자동으로 equals 로 바꿔줍니다.



여기까지는 원론적인 이야기

여기부터는 구현 상세 이야기



JVM 내부의 최적화 과정 중 길이가 매우 짧은 문자열을 다른 형태로 바꾸는 작업을 수행하기도 합니다. 만약 이런 최적화 과정을 거쳤다면 서로 같은 내용의 문자열은 같은 "주소" (실제 내용은 더 이상 주소가 아닐 수도 있음) 을 가지게 됩니다.

하지만 이는 어디까지나 선택적으로 적용되는 최적화 기법이며, 프로그램을 작성할 때는 여기에 의존해서는 안 됩니다.

khseob0715   1년 전

와... 설명 감사합니다. 제대로 이해가 됬어요 감사합니다 

댓글을 작성하려면 로그인해야 합니다.