2013-06-06 60 views
-3

之間的差異可以任何一個解釋嗎?布爾值res = a == b和布爾值res =(a == b)

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 

爲什麼這種差異的B/W res1res2

res2=a==b怎麼會在這裏的兩個對象和res1=(a==b)爲什麼這裏參考

+2

您不打印'res1'。 – jlordo

+1

對於這個問題,也不是'res2'。 –

+5

這裏做'(a == b)'和'a == b'沒有區別。你真的在問什麼?您可能注意到您的代碼對我們來說沒有意義,因爲您正在打印出「r」和「res」,這是我們看不到的變量。 – nos

回答

0

兩個println打印false因爲a不在參考平均值等於b

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。評估是在做作前完成的,所以你的測試實際上是相同的。

他們用其他方法是沒有意義的,您不能指定Stringboolean,然後檢查結果是否具有相同的參考String

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"兩次,並作爲一種優化分配都在同一實習字符串實例。

當然,我猜測OP最初的目標是什麼。我可能會脫軌

相關問題