java.util.scanner - 从键盘读取输入后出现奇怪的问题
问题描述
编辑: ArrayList 不需要重现“错误”。很抱歉这个延迟,但知道它应该更清楚。
为什么是:
c2.number.equals(c3.number) = false
我真的很期待这里是真的。我的equals方法一定有问题吗?
为什么我需要写更多的文字......
package com.example.mypackage;
import java.util.ArrayList;
import java.util.Scanner;
class Contact {
public String name;
public String number;
public Contact(String name, String number) {
this.name = name;
this.number = number;
}
public void print(){
System.out.println(name+number);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
} else if (obj == null) {
return false;
} else if (obj instanceof Contact) {
Contact contact = (Contact) obj;
if ((contact.name == this.name && contact.number == this.number)) {
return true;
}
}
return false;
}
}
public class Main {
private static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
Contact c1 = new Contact("ben", "1");
c1.print();
Contact c2 = new Contact("ben", "1");
c2.print();
System.out.println("name : ");
String name=scanner.nextLine();
System.out.println("number");
String number=scanner.nextLine();
Contact c3=new Contact(name, number);
c3.print();
System.out.println("c1.equals(c2) = "+c1.equals(c2));
System.out.println("c3 instanceof Contact = "+(c3 instanceof Contact));
System.out.println("c2.name.equals(c3.name) = "+c2.name.equals(c3.name));
System.out.println("c2.number.equals(c3.number) = "+c2.number.equals(c3.number));
System.out.println("c2.number.equals(c3.number) = "+c3.equals(c2));
}
}
输出是:
ben1
ben1
name :
ben
number
1
ben1
c1.equals(c2) = true
c3 instanceof Contact = true
c2.name.equals(c3.name) = true
c2.number.equals(c3.number) = true
c2.number.equals(c3.number) = false
Process finished with exit code 0
为什么是:
c2.number.equals(c3.number) = false
我真的很期待这里是真的。我的equals方法一定有问题吗?
为什么我需要写更多的文字......
为什么是:
c2.number.equals(c3.number) = false
我真的很期待这里是真的。我的equals方法一定有问题吗?
为什么我需要写更多的文字......
为什么是:
c2.number.equals(c3.number) = false
我真的很期待这里是真的。我的equals方法一定有问题吗?
为什么我需要写更多的文字......
解决方案
啊,我终于明白了。错误在equals方法中。
我必须在那里使用“equals()”而不是“==”。由于某种原因,这种比较确实适用于 c1 和 c2,但不适用于 c3。
推荐阅读
- android-edittext - AppBarLayout CollapsingToolbar 如何在 EditText 单击时禁用展开?
- javafx - JavaFX 模拟产品调查
- java - 从日期取星期几
- python - 为什么在 tmux 下运行时,我的 python 中的 sys.path 不一样?
- php - Wordpress 有 index.php 和 single.php 显示相同的内容
- android - 如何创建自定义 UI 组件,如响应式搜索栏?
- php - 如何使用类而不是对象调用函数
- node.js - 在 CRUD 应用程序的快递中,如果我们使用 post 方法删除和使用删除请求删除有什么区别?
- vhdl - VHDL - 连接开关和 LED
- python - 根据条件将字典项拆分为更小的字典