55.重写Object类的方法
把equals()方法体自定义为我们自己的比较规则即可:两个学生学号和姓名相同,就认为是同一个学生对象
判断obj和this(当前学生对象)是否为同一对象
如果this当前学生对象和obj内存地址相同,==结果为true,就认为两者为同一对象
如果传进来的obj对象不是学生类型(Student)类型,结果一定是false
instanceof运算符: 用来判断某个对象是否为某种类型 --- 对象名instanceof 类型名
如果obj是Student类型
比较s和this的sid及name即可
当有特殊需求,如认为属性相同即为同一对象时,需要重写equals()
快捷键:alt+insert选择Override Methos...
instanceof用于判断一个引用类型所引用的对象是否是一个类的实例
Java.lang.Sting重写了equals()方法,把equals()方法的判断变为了判断其值。
总结:
Object类的方法可以根据需求自行重写
instanceof用于判断一个引用类型所引用的对象是否是一个类的实例
package cn.com.objdemo;
import java.util.Locale;
//学生类
public class Student {
//学号 姓名 年龄 体重
private int sid;
private String name;
private int age;
private int weight;
public Student(){
}
public Student(int sid,String name,int age,int weight){
this.sid=sid;
this.name=name;
this.age=age;
this.weight=weight;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
//把equals()方法体自定义为我们自己的比较规则即可:两个学生学号和姓名相同,就认为是同一个学生对象
//判断obj和this(当前学生对象)是否为同一对象
public boolean equals(Object obj) {
if(this==obj){
//如果this当前学生对象和obj内存地址相同,==结果为true,就认为两者为同一对象
return true;
}
//如果传进来的obj对象不是学生类型(Student)类型,结果一定是false
//instanceof运算符: 用来判断某个对象是否为某种类型 --- 对象名instanceof 类型名
if(!(obj instanceof Student)){
return false;
}
//如果obj是Student类型
Student s=(Student) obj;
//比较s和this的sid及name即可
if(this.sid == s.sid && this.name.equals(s.name)){
return true;
}else{
return false;
}
}
//重写toString():对象信息不要返回类似内存地址的信息,而是返回学生姓名
public String toString() {
return this.name;
}
public static void main(String[] args) {
Student s1=new Student(1,"小哈",23,35);
Student s2=new Student(1,"小哈",23,35);
//判断两个对象是否为同一对象: == equals()
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
/*Student s1=new Student(1,"小哈",23,35);
Student s2=s1;
//判断两个对象是否为同一对象: == equals()
System.out.println(s1==s2);
System.out.println(s1.equals(s2));*/
System.out.println("_______________________");
//如下两句代码作用相同,输出一个对象时,等同于调用了它的toString()
System.out.println(s1.toString());
System.out.println(s1);
//String类不仅重写了equals()方法,还重写了toString()方法
String s="test";
//如下两句代码作用相同,输出一个对象时,等同于调用了它的toString()
System.out.println(s.toString());
System.out.println(s);
}
}