Java-Object

java当中最顶层的一个类,我们写的所有的类,默认都会继承Object类
1) toString():用来描述当前对象的信息,但是sun建议我们设计新的类,最好能重写该方法
默认情况下:返回是包名+类名@+十六进制字符串
输出对象的时候,默认调用toString方法

public class Test1 {
    public static void main(String[] args) {
        User user=new User();
        System.out.println(user.toString());
    }
}
class User{
//重写User从Object中继承过来toString方法
    public String toString(){
        String name="User类的对象";
        return name;    
    }
}
public class Test1 {
    public static void main(String[] args) {
        Teacher teacher=new Teacher("张",5000,"男");
        System.out.println(teacher);
    }
}
class Teacher{
    String name;
    double salary;
    String sex;
    Teacher(String name,double salary,String sex){
        this.name=name;
        this.salary=salary;
        this.sex=sex;
    }
    public String toString(){
        String message="Teacher类的对象名字是:"+name+"工资是:"+salary+"性别是:"+sex;
        return message;
    }
}

2) hashcode()
返回值就是该对象在内存中地址转化以后的一个数字
sun规定:如果判断一个类的两个对象,如果相等,两个对象hashcode(),返回值,必须一致
如果我们要对对象是否相等,进行判断的话,首先必须要重写hashcode()

public class Test1 {
    public static void main(String[] args) {
        Student student=new Student();
        System.out.println(student.hashCode());//结果:2018699554
    }
}
class Student extends Object{
}

3) equals()
1. ==:相等
基本数据类型:“==”-->相等,eg:1==1
引用数据类型:“==”-->两个对象的物理地址相同(同一个对象)
2. 引用数据类型如何判断两个对象是否相等?
equals():返回值是false,不相等,如果返回值是true,相等
3. sun公司建议:如果需要判断两个对象是否相等,则必须重写hashcode()方法和equals()方法
hashcode():只要对象相等,hashcode()方法返回值,也必然相等
equals():首先是要比较的对象是否为null,任何对象跟null,永远都是不相等的,使用返回值是false
        其次判断要比较的两个对象的地址是否相等,如果地址相等,则必然是同一个对象,返回值是true
        之后判断要比较的两个对象的类是否一致,只有同一个类型的两个对象,才可以比较
对象 instanceof 类型:如果该对象是类型的一个对象,则结果为true,反正false
        最后由我们自己来指定比较的规则,一般是判断其某些属性的值是否一致

public class Test1 {
    public static void main(String[] args) {
        Student1 s1=new Student1("刘",12);
        Student1 s2=new Student1("刘",12);
        //"==":(引用类型)用来判断两个对象的地址是否一致
        //s1是一个单独的对象,应该属于s1的地址
        //s2也是一个单独的对象,也有属于s2的地址
        //两个不同的对象,地址必然不同,同一个地址只能有一个对象
        System.out.println("s1==s2"+(s1==s2));//结果:s1==s2false
        System.out.println(s1.hashCode());//结果:12
        System.out.println(s2.hashCode());//结果:12
        //equals():默认是用"=="来比较两个对象是否相等
        boolean flag=s1.equals(s2);
        System.out.println(flag);//结果:true
        //sun建议:引用类型对象比较是否相等,必须要重写hashcode()(只需要保证两个对象如果相等,该方法返回值一致即可)
        //equals()(由程序员自己来指定两个对象相等的规则)
        Student1 stu1=new Student1("刘",55);
        Student1 stu2=new Student1("刘",66);
        Student1 stu3=new Student1("刘",66);
        System.out.println("stu1和stu2是否相等"+stu1.equals(stu2));//结果:stu1和stu2是否相等false
        System.out.println("stu2和stu3是否相等"+stu2.equals(stu3));//结果:stu2和stu3是否相等true
        System.out.println("stu1和null是否相等"+stu1.equals(null));//结果:stu1和null是否相等false
        System.out.println("stu1跟自己是否相等"+stu1.equals(stu1));//结果:stu1跟自己是否相等true
    }
}
class Student1{
    String name;
    int age;
    Student1(String name,int age){
        this.name=name;
        this.age=age;
    }
    public int hashCode() {  //重写hashcode()
        return age;
    }
    public boolean equals(Object obj) {  //重写equals()
        //obj:要比较的对象
        if(obj==null){ //null
            return false;
        }
        if(this==obj){ //(this:当前的对象),是否是同一个对象
            return true;
        }
        if(obj instanceof Student1){ //同一类型(对象 instanceof 类型:判断对象是否属于该类型)
            //由我们自己来设置,只要name属性和age属性的值一致,就认为是相等的
            //把obj转化为Student类型
            Student1 stu=(Student1)obj;
            if(this.name.equals(stu.name)&&this.age==stu.age){
            return true;
            }
        }
        return false;
    }    
}
posted @ 2020-04-28 11:18  LilyoO  阅读(162)  评论(0编辑  收藏  举报