indexOf()具有重复字符串的奇怪Java.util.List行为

前端之家收集整理的这篇文章主要介绍了indexOf()具有重复字符串的奇怪Java.util.List行为前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我刚刚遇到一些奇怪的行为,我不期望从ArrayList< String>在 Java中.当然,这是因为我对 Java中的引用的理解不足.

让我告诉你这段代码

List<String> myList = new ArrayList<>();

myList.add("One");
myList.add("Two");
myList.add("Two");
myList.add("Three");

for (String s : myList){
  System.out.println(myList.indexOf(s));
}

这段代码提供以下输出

0  
1  
1  
3

怎么会?我故意添加了两个包含相同字符(“Two”)的字符串,但是对象本身不应该是相同的.我在这里误解了什么?我期待这个其他输出

0
1
2
3

解决方法

ArrayList.indexOf()不使用引用相等来查找对象.它使用equals()方法.注意文档说的内容(强调我的):

returns the lowest index i such that (o==null ? get(i)==null : o.equals(get(i))),or -1 if there is no such index.

因此,它将匹配逻辑上相等的第一个字符串.

编辑:

Andremoniy的评论是完全正确的.在字符串文字的情况下,因为它们是实习的,所以它们也恰好具有相同的引用.因此,在这种情况下,你的2个字符串“Two”实际上是相同的引用.

System.out.println("Two" == "Two"); // will return true because they are the same reference.
原文链接:https://www.f2er.com/java/127520.html

猜你在找的Java相关文章