为什么我这个程序输入正确的验证码,用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("验证失败");
}

}


阿波罗的战车
浏览 494回答 5
5回答

鸿蒙传说

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

繁花不似锦

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

Qyouu

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

jeck猫

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

弑天下

先纠正那是hashcode,是生成出来区别对象的,而且如楼下所说,你是用ArrayList和String比较,当然不同,并不是ArrayList里面是String它就会相同,ArrayList也是一个对象,你调用的是ArrayList的equals,它的类型就是ArrayList
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java