== 2つの異なるオブジェクトsとpのnewの結果を使って作成されたStringの変数に対して、私が理解しているfalse(行1)を返しますが、なぜ3行目と4行目(コメント行番号)2つの異なるオブジェクトに対してTestクラスの変数が==操作に対してtrueを返し、同じ操作でStringオブジェクトに対してfalseが返されるのはなぜですか?
私は、==は参照の比較のためのものであり、参考比較のためのものであれば疑問があるということを認識しています。なぜなら、jが整数であり、なぜなら不変性の概念はないからです。 String(String s)と新しいオブジェクトを作成するたびに?
class World
{
public static void main(String[] args)
{
String s=new String("B");
String p=new String("B");
System.out.println(s==p); //false line 1
Test t1= new Test("A",4);
Test t2= new Test("A",4);
System.out.println(t1==t2); //false line 2
System.out.println(t1.s==t2.s); //true line 3
System.out.println(t1.j==t2.j); //true line 4
}
}
class Test
{
String s;
int j;
Test(String s, int j)
{
this.s=s;
this.j=j;
}
}
"t1とt2が異なるオブジェクトであるため、3行目と4行目が異なる理由* - ' t1'と 't2'は異なるオブジェクトですが、3行目で比較していません。それらが保持する文字列は、異なるオブジェクトではありません。同じ文字列リテラル "A"に2つの参照があります。これは、新しい 'String'オブジェクトを明示的に作成した' s'や 'p'で行ったのとは非常に異なります。 – azurefrog