Java에서 문자열을 비교하려면 어떻게 하나요?

1개월 전 질문 1개월 전 토론 18 views

지금까지 프로그램에서 == 연산자를 사용하여 모든 문자열을 비교했는데요.

버그가 있어서 .equals()로 바꿔서 해결했습니다.

==를 쓰면 안되나요?

언제 써도 되고 언제 쓰면 안되나요?

java

2022-05-15 19:32

2개의 해답

// These two have the same value
new String("test").equals("test") // --> true 

// ... but they are not the same object
new String("test") == "test" // --> false 

// ... neither are these
new String("test") == new String("test") // --> false 

// ... but these are because literals are interned by 
// the compiler and thus refer to the same object
"test" == "test" // --> true 

// ... string literals are concatenated by the compiler
// and the results are interned.
"test" == "te" + "st" // --> true

// ... but you should really just call Objects.equals()
Objects.equals("test", new String("test")) // --> true
Objects.equals(null, "test") // --> false
Objects.equals(null, null) // --> true

==는 레퍼런스가 같은지 체크합니다(같은 개체인지 여부).

.value는 값이 같은지에 대한 테스트입니다(논리적으로 "정확한"지 여부).

Objects.equals()는 .equals()를 호출하기 전에 null을 확인하므로 확인할 필요가 없습니다

따라서 두 문자열의 값이 동일한지 여부를 체크하려면 Objects.equals()를 사용해야 합니다.


2022-05-15 19:36

==는 개체 레퍼런스를 테스트하고, .equals()는 문자열 값을 테스트합니다.

Java는 동일한 인라인 문자열이 실제로 동일한 개체인지 확인하기 위해 몇 가지 비하인드 작업을 하기 때문에 ==가 값을 비교하는 것처럼 보일 때가 있습니다.

예를 들면 아래와 같습니다.

String fooString1 = new String("foo");
String fooString2 = new String("foo");

// Evaluates to false
fooString1 == fooString2;

// Evaluates to true
fooString1.equals(fooString2);

// Evaluates to true, because Java uses the same object
"bar" == "bar";


2022-05-15 20:03

해결방법이나 팁을 알고 계신다면


© 2022 pinfo. All rights reserved.