これまでJavaを使ったことがなかったので、ジェネリック構文を自分で学んでいました。いくつかの文字列を使用して単純なジェネリック関数をテストしていたところ、少し奇妙なことに気づきました。
public class Main {
public static <T> boolean areSameReference(T lhs, T rhs) {
return lhs == rhs;
}
public static void main(String[] args) {
String s = new String("test1");
String t = s;
String u = new String("test1");
System.out.println(areSameReference(s, t)); //true
System.out.println(areSameReference(s, u)); //false
String v = "test2";
String w = "test2";
System.out.println(areSameReference(v, w)); //true
}
}
なぜ[s]と[u]は異なる参照ですが、[v]と[w]は同じ参照ですか?「新しい」文字列リテラルの有無にかかわらず、どちらの場合も一貫して同じまたは異なる文字列リテラルになると思いました。
私はここで何か他のことが起こっているのを見逃していますか?