所以看起来我的java程序无法识别两个相同的对象,即使我使用的方法与之前的问题相同,其中java确实将两个对象识别为相同。这个程序的唯一区别是我有一个额外的keyboard.nextLine(),这是输入对象2的名称/地址所必需的。
这是课堂输入
public boolean equals(Person num1) {
if ((this.name==num1.name)&&(this.address==num1.address)&&
(this.age==num1.age)&&(this.phoneNumber==num1.phoneNumber))
return true;
else
return false;
}
这是演示输入
import java.util.Scanner;
public class PersonDemo {
public static void main(String[] args) {
Person num1, num2;
num1=new Person();
num2=new Person();
String name, address;
int age;
long phoneNumber;
Scanner keyboard = new Scanner(System.in);
System.out.println("Input the name of person 1:");
name=keyboard.nextLine();
System.out.println("Input the address of person 1:");
address=keyboard.nextLine();
System.out.println("Input the age of person 1:");
age=keyboard.nextInt();
System.out.println("Input the phone number of person 1:");
phoneNumber=keyboard.nextLong();
keyboard.nextLine();
num1.setName(name);
num1.setAddress(address);
num1.setAge(age);
num1.setPhoneNumber(phoneNumber);
System.out.println("\nInformation of person 1: ");
System.out.println(num1);
System.out.println("\nInput the name of person 2:");
name=keyboard.nextLine();
System.out.println("Input the address of person 2:");
address=keyboard.nextLine();
System.out.println("Input the age of person 2:");
age=keyboard.nextInt();
System.out.println("Input the phone number of person 2:");
phoneNumber=keyboard.nextLong();
num2.setName(name);
num2.setAddress(address);
num2.setAge(age);
num2.setPhoneNumber(phoneNumber);
System.out.println("\nInformation of person 2: ");
System.out.println(num2);
if (num1.equals(num2))
System.out.println("\nPerson 1 and person 2 are identical.");
else
System.out.println("\nPerson 1 and person 2 are not identical.");
}
}
答案 0 :(得分:1)
对于Object(such as String)
,您需要使用equals方法。 ==
仅测试这两个对象是否是相同的对象(比较内存地址)。在您的情况下,num1.name
和num2.name
是不同的对象,尽管它们的内容是相同的。
答案 1 :(得分:0)
问题:
这样做:
@Overrides
public boolean equals(Object num1) {
boolean result = false;
if (num1 != null && num1 instanceof Person) {
Person personNum1 = (Person)num1;
result = this.name.equals(personNum1.name) &&
this.address.equals(personNum1.address) &&
this.age.equals(personNum1.age) &&
this.phoneNumber.equals(personNum1.phoneNumber);
}
return result;
}
顺便说一句,关于equals的任何合理教程都会显示出这一点。 :)