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

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("验证失败");
}

}

3个回答

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

qq_42230727
qq_42230727 回复GzlAndy: x谢谢啦
一年多之前 回复
GzlAndy
GzlAndy 你也说是List里面存的值是String类型的,而不是List本身,所以你应该get(index)出来值去比较而不是List对象
一年多之前 回复
qq_42230727
qq_42230727 LIst里面不是也保存的字符串类型吗,是一样的啊
一年多之前 回复

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

qq_42230727
qq_42230727 他两的关系我知道,不是空格导致的,你可以运行看看。而且题库里的答案就是用的contains,这是我想不明白打的地方,为什么用equals就不行
一年多之前 回复

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

qq_42230727
qq_42230727 回复Rising-Moon: 谢谢啦
一年多之前 回复
qq_43486639
Rising-Moon 回复qq_42230727: 先纠正那是hashcode,是生成出来区别对象的,而且如楼下所说,你是用ArrayList和String比较,当然不同,并不是ArrayList里面是String它就会相同,ArrayList也是一个对象,你调用的是ArrayList的equals,它的类型就是ArrayList
一年多之前 回复
qq_42230727
qq_42230727 我不知道是因为两者地址不一样,还是list没有重写equals方法和hascode方法导致的
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐