0

为什么它打印错误的输出?

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

这个数组列表存储了以下值:

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

第一个索引 0 是 = topLeft

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

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

该程序打印错误的输出not same而不是same

4

2 回答 2

3

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

==如果两个引用指向内存中的同一个对象,则运算符返回 true 。equals ( Object o)方法检查两个对象是否相等,因此如果两个字符串仅包含相同顺序的相同字符,则返回 true。

于 2010-03-28T20:29:37.223 回答
1

字符串比较是通过调用str1.equals(str2)而不是使用来完成的==

  • equals(..)比较字符串的内容
  • ==比较参考文献,它们并不相同。

然而,还有一点要知道。String初始化为文字的对象,即

String str = "someString"

而不是通过构造(String str = new String("some"))都是同一个对象。因为他们==会工作。

最后,对于 any String,调用intern()返回一个String与具有相同内容的所有其他字符串相同的对象。(阅读intern()'s 文档以获取更多信息)

但是这里的最佳实践是使用equals(),同时要小心如果您调用它的对象(第一个字符串)不是null

于 2010-03-28T20:33:54.110 回答