package test3;
//需要在Person类中复写equals()
//自定义一个Person类,有name和age属性,并一个两个参数的构造函数,在主函数main中,
//定义两个Person对象p1和p2,如下,调用equals比较这个两个对象是否相等。
//Person p1 = new Person(“xiaowang”,12);
//Person p2 = new Person(“xiaowang”,12);
//p1.equals(p2);
public class Person {
String name;
int age;
public boolean equals(Object obj){
//1、指向位置相同,指定同一对象
if(this == obj){
return true;
}
//2、指向位置不同
//能调用这里的equals,肯定是生成了person对象的,所以this肯定是person类型
//判断obj是不是person类型,如果是就跟this为同一类型
boolean b =obj instanceof Person;
if(b){
//obj向下转型为person对象,以便一定能调用person里面的值
Person u =(Person)obj;
//这里的equals是用name调用的(jdk里面String复写过的equals方法),不是当前类的equals
//基本数据类型用==比,引用数据类型用equals比
if(this.age == u.age && this.name.equals(u.name)){
return true;
}else{
return false;
}
}else
{
//类型不同,不是person对象,不等
return false;
}
}
public Person(String name, int age) { //构造函数
this.name=name;
this.age=age;
}
public static void main(String[] args) {
Person p1 = new Person("xiaowang",12);
Person p2 = new Person("xiaowang",12);
System.out.println(p1.equals(p2));
}
}
package test2;
//定义两个String类型的变量,str和str1,如下
//String str = new String(“hello”);
//String str1 = “hello”;
//分别用==和equals比较这str和str1是否相等,并打印出来,并加注释说明相等和不相等的原因。
public class TestEqual {
public static void main(String[] args) {
String str = new String("hello");
String str1 = "hello";
if(str==str1){ //用==比较这str和str1是否相等
System.out.println("str与str1相等");//用==比较的是str与str1的地址是否相等
}else{
System.out.println("str与str1不相等");
}
System.out.println(str.equals(str1)); //用equals比较这str和str1是否相等
} //在string类中用equals比较的是str和str1中的内容
}