2010-03-28 135 views
0

爲什麼它打印錯誤的輸出?閱讀ArrayList元素

ArrayList<String> loc = new ArrayList<String>(); 

此ArrayList存儲的值:

[topLeft, topLeft, topLeft, bottomLeft, topLeft, bottomLeft, topLeft, topLeft, Left, topLeft] 

冷杉索引0是=左上

if(loc.get(1)=="topLeft") 
    System.out.println("same") 

else { 
    System.out.println("not same") 
} 

此程序的打印錯誤的輸出的not same代替same

回答

3

使用方法,而不是==運算符,例如loc.equals("topLeft")

如果兩個引用指向內存中的同一對象,則==運算符返回true。 equals(Object o)方法檢查兩個對象是否相等,如果兩個Strings只包含相同順序的相同字符,則返回true。

+0

非常感謝你...我怎麼能錯過:-) – Jessy 2010-03-28 20:33:35

1

通過調用str1.equals(str2)而不是使用==來完成字符串比較。

  • equals(..)比較字符串內容
  • ==比較引用,他們是不一樣的。

但是還有一點需要了解。 String對象被初始化爲文字,即

String str = "someString" 

代替經由結構(String str = new String("some"))都是相同的對象。對於他們==將工作。

最後,對於任何String,調用intern()返回的String與所有其他具有相同內容的字符串都是相同的對象。 (讀intern()的更多信息文檔)

但是這裏最好的做法是使用equals(),同時注意如果要調用它(第一個字符串)的對象不是null

+0

謝謝博茲胡.. – Jessy 2010-03-28 20:49:56