如何检查我Input String是否在我的体内ArrayList?我是这样做的。但是它总是显示出来的"not equal"。我1以Althoug为例:public class Main { public static void main(String[] args) { String Input = JOptionPane.showInputDialog("Input:"); ArrayList<String> list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); list.add("4"); if (Input.equals(list)) { JOptionPane.showMessageDialog(null, "equals"); } else { JOptionPane.showMessageDialog(null, "not equal"); } }}
2 回答
![?](http://img1.sycdn.imooc.com/54584f8f00019fc002200220-100-100.jpg)
胡子哥哥
TA贡献1825条经验 获得超6个赞
解释
你写了
if (Input.equals(list)) { ... }
与Input
是String
和list
一个ArrayList
。但是,String#equals
(documentation)方法比较两个String
s是否具有相同的字符(如"hello".equals("hello")
),而不是比较参数列表是否包含您在其上调用了该方法的元素。引用其文档:
将此字符串与指定对象进行比较。结果是,
true
当且仅当参数不是,null
并且是一个String
表示与此对象相同字符序列的对象。
解决方案
您实际要使用的是List#contains
(文档):
返回
true
此列表是否包含指定的元素。更正式地讲,true
当且仅当此列表包含至少一个e
诸如此类的元素时,才返回Objects.equals(o, e)
。
因此,代码可能如下所示:
if (list.contains(Input)) { ... }
命名约定
请注意命名约定。变量名称应始终位于camelCase中,input
而不是Input
。方法名称相同。
仅类名称用PascalCase编写。常量(static final
)用大写SNAKE_CASE编写。
![?](http://img1.sycdn.imooc.com/545863080001255902200220-100-100.jpg)
holdtom
TA贡献1805条经验 获得超10个赞
如果要检查确实List<T>
包含T item
您应该yourList.contains(T item)
在代码中使用的代码,则使用的item.equals(object)
是完全不同的代码。简而言之,equals()
它检查两个对象是否都存储在相同的内存地址中。尽管对于某些默认类,此方法将被覆盖并以不同的方式起作用,但String
class是一个很好的例子。
添加回答
举报
0/150
提交
取消