为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我这个程序输入正确的验证码,用equals会出现验证失败,用contains才会验证成功?

为什么我这个程序输入正确的验证码,用equals会出现验证失败,用contains才会验证成功?

阿波罗的战车 2019-04-18 18:15:44
public static void main(String[] args) throws IOException {BufferedWriter bw = new BufferedWriter(new FileWriter("work-code\data.txt"));Scanner sc = new Scanner(System.in);for (int i = 0; i < 3; i++) {System.out.println("录入验证码:");String s = sc.next();bw.write(s);bw.newLine();}bw.flush();bw.close();System.out.println("输入正确的验证码:");String confirmation = sc.next();BufferedReader br = new BufferedReader(new FileReader("work-code\data.txt"));String len = null;ArrayList list = new ArrayList<>();while ((len = br.readLine()) != null){list.add(len);}br.close();if (list.contains(confirmation)){System.out.println("验证成功");}else {System.out.println("验证失败");}}
查看完整描述

5 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

你用Arraylist对象和String对象使用equal()方法比较? 根本就不是一个类型的呀


查看完整回答
反对 回复 2019-05-14
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

你也说是List里面存的值是String类型的,而不是List本身,所以你应该get(index)出来值去比较而不是List对象

查看完整回答
反对 回复 2019-05-14
?
Qyouu

TA贡献1786条经验 获得超11个赞

contains 是包含
equals是比较,检查下是不是前后空格导致的比较失败

查看完整回答
反对 回复 2019-05-14
?
jeck猫

TA贡献1909条经验 获得超7个赞

因为contains是判断其中有没有包含目标字符串,只要其中有目标字符串就会返回true。
equals是比较,只有相等才返回true。
并且,对于字符串调用equals是比较两个字符串内容是不是相符,但对于其他类的对象调用equals不仅比较两者是否相同,还会比较他们的hashcode,即两者为同一个对象才会返回true。
我对于这道题的理解是,本地保存的验证码有很多段,用户输入的验证码只要符合其中一段便验证通过,所以只是包含关系。

查看完整回答
反对 回复 2019-05-14
?
弑天下

TA贡献1818条经验 获得超8个赞

先纠正那是hashcode,是生成出来区别对象的,而且如楼下所说,你是用ArrayList和String比较,当然不同,并不是ArrayList里面是String它就会相同,ArrayList也是一个对象,你调用的是ArrayList的equals,它的类型就是ArrayList

查看完整回答
反对 回复 2019-05-14
  • 5 回答
  • 0 关注
  • 492 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信