Language
String: == と equals
同じ文字列でも、参照と値の比較は別の契約です。
SourceStringComparison.java
Java 21
package examples.string;
public final class StringComparison {
private StringComparison() {}
public static boolean sameReference(String left, String right) {
return left == right;
}
public static boolean sameValue(String left, String right) {
return left.equals(right);
}
}TestStringComparisonTest.java
Java 21
package examples.string;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test;
class StringComparisonTest {
@Test
void 同じ内容でも別のStringなら参照は等しくない() {
var literal = "java";
var copied = new String("java");
assertFalse(StringComparison.sameReference(literal, copied));
}
@Test
void 同じ内容のStringはequalsで等しい() {
var literal = "java";
var copied = new String("java");
assertTrue(StringComparison.sameValue(literal, copied));
}
}01Assertion
このテストで確認できること
- == は同じオブジェクトを参照しているかを確認する
- equals は文字列の内容が等しいかを確認する
String は値の比較に equals を使います。リテラルの共有に依存せず、比較したい対象を明示します。
OBSERVED RESULT
expected: equals → true
actual: equals → true