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 回答
jeck猫
TA贡献1909条经验 获得超7个赞
因为contains是判断其中有没有包含目标字符串,只要其中有目标字符串就会返回true。
equals是比较,只有相等才返回true。
并且,对于字符串调用equals是比较两个字符串内容是不是相符,但对于其他类的对象调用equals不仅比较两者是否相同,还会比较他们的hashcode,即两者为同一个对象才会返回true。
我对于这道题的理解是,本地保存的验证码有很多段,用户输入的验证码只要符合其中一段便验证通过,所以只是包含关系。
弑天下
TA贡献1818条经验 获得超8个赞
先纠正那是hashcode,是生成出来区别对象的,而且如楼下所说,你是用ArrayList和String比较,当然不同,并不是ArrayList里面是String它就会相同,ArrayList也是一个对象,你调用的是ArrayList的equals,它的类型就是ArrayList
添加回答
举报
0/150
提交
取消