indexOf()具有重复字符串的奇怪Java.util.List行为
发布时间:2020-12-14 23:36:30 所属栏目:Java 来源:网络整理
导读:我刚刚遇到一些奇怪的行为,我不期望从ArrayList String在 Java中.当然,这是因为我对 Java中的引用的理解不足. 让我告诉你这段代码: ListString myList = new ArrayList();myList.add("One");myList.add("Two");myList.add("Two");myList.add("Three");for (
我刚刚遇到一些奇怪的行为,我不期望从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()方法.注意文档说的内容(强调我的):
因此,它将匹配逻辑上相等的第一个字符串. 编辑: Andremoniy的评论是完全正确的.在字符串文字的情况下,因为它们是实习的,所以它们也恰好具有相同的引用.因此,在这种情况下,你的2个字符串“Two”实际上是相同的引用. System.out.println("Two" == "Two"); // will return true because they are the same reference. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- “volatile char *”类型的参数与“const char *”类型的参
- java – 如何在spring上下文中将null设置为Integer
- java – 方法的返回类型中T与T之间的区别是什么?
- java – Overlaping Shapes – 错误的重叠形状行为
- 每日一练2
- java – JSONObject有序映射参数
- java.lang.ClassNotFoundException:org.apache.commons.la
- java – 检查对象是否为null
- learning java AWT BoxLayout布局管理器
- spring boot集成pagehelper(两种方式)