-4

誰でも説明できますか?

String a=new String("srihari");
String b=new String("srihari");

boolean res1=(a==b); // reference check
System.out.println(r); // true

boolean res2=a==b;   // object check (diff object)
System.out.println(res);  // false

なぜこの diff b/wres1res2,

res2=a==bここで 2 つのオブジェクトがどのように、res1=(a==b)なぜここで参照されるのか

4

3 に答える 3

4

適切な変数を使用していません:

String a=new String("srihari");
String b=new String("srihari");

boolean res1=(a==b);
System.out.println(res1); // false

boolean res2=a==b;
System.out.println(res2);  // false

説明に関しては、リファレンスチェックを毎回行いますfalse。評価は影響の前に行われるため、両方のテストは実際には同じです。

Stringaを a に代入してからboolean、結果が別の と同じ参照を持っているかどうかを確認することはできませんString

于 2013-06-06T08:47:08.930 に答える
0

参照平均では と等しくないため、両方ともprintln印刷されます。falseab

于 2013-06-06T08:47:06.787 に答える
0

提供されたコードサンプルは、OPの問題を引き起こした元のものではないと想定していますが(他の人が指摘した変数の問題による)、実際には参照==Stringで返さtrueれる可能性があります(これはOPが経験したことかもしれません) .

public class Main
{
     public static void main(String... args)
     {
         String s1 = "srihari";
         String s2 = "srihari";
         System.out.println(s1 == s2); //true
     }
}

この理由は、Java が文字列リテラル"srihari"を 2 回認識し、最適化として同じインターンされた文字列インスタンスに両方を割り当てるためです。

もちろん、OPが当初意図したことを推測しています。私は軌道に乗っていないかもしれません

于 2013-06-06T11:19:21.187 に答える