2014-03-19 17 views
3
String att = "siva"; 
String ptt = "siva"; 

System.out.println("__________________________ptt.equals(att)_______"+ptt.equals(att)); 
**System.out.println("__________________________att == ptt________"+att == ptt);** 
if(att == ptt){ 
    System.out.println("true"); 
}else{ 
    System.out.println("false"); 
} 

在我的日誌我發現以下的輸出:是什麼時候串==是的System.out.println(用於比較與差),並在if語句

__________________________ptt.equals(att)_______true 
**false** 
true 

這裏如果你看看java代碼和日誌(粗體)。它們是有區別的 。

  1. 在打印聲明中,我給出了一些長文本的下劃線。它沒有出現。
  2. att == ptt在打印語句中給出時爲false。如果條件滿足,則爲true。

已知我知道, 什麼是參考和什麼是對象。
att == ptt和att.equals(ptt)有什麼區別。
字符串的不變性。

但只是知道爲什麼它以不同的形式打印時返回false和true?以及爲什麼我在打印語句中輸入的文本沒有反映在日誌中?

請糾正它,如果我錯了..或如果任何額外的輸入是必需的。

+2

@Abimaran說的是正確的...在'println()'語句環繞'att == ptt'中打印'true',其中括號如'(att == ptt)',其中圓括號優先於連接 – Pokuri

+0

要理解發生什麼,應該閱讀有關運算符優先級http ://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html –

回答

6

在打印聲明中,我給出了一些長文本的下劃線。 它沒有出現。

因爲,那些被下劃線以串聯和att檢查與ptt到指涉平等(==),並打印假,監守concataneted字符串和ptt不指稱相等。更改它像下面讓你期望的輸出

System.out.println("__________________________att == ptt________"+(att == ptt)); 

att==ptt當它與在打印語句給作假。 在if條件給出時爲true。

兩者都是指同一個String在字符串常量池的文字,但是,在上述情況下(你的第一個問題),att與下得分,並與==

2

改線相比級聯:

System.out.println("__________________________att == ptt________"+(att == ptt)); 

現在您的輸出將如預期。首先比較attptt的參考號,然後打印。你只能放棄括號。現在結果將與if語句中的結果相同。結果是true,因爲您正在使用字符串文字分配值"siva"。在內部,這些文字有相同的參考。如果您創建了像new String("siva")這樣的字符串對象,則代碼的輸出將爲假,因爲您將引用與==進行比較,如果創建了兩個對象,則引用不同。