Object类的一些方法

Object类:所有类的超类(父类)。 所有对象(包括数组)都实现了这个类的方法。

hashCode()

Object类的方法:
public int hashCode():返回该对象的哈希码值。
哈希值是根据哈希算法算出来的一个值,这个值和地址有关,但是不是实际地址值。可以先理解为地址值。
以下有code测试。

getClass()

public final Class getClass():返回Object的运行时类。
顺便了解一个Class类里的方法:public String getName():以String的形式返回此Class对象所表示的实体。
以下有code测试。

toString()

public String toString():返回该对象的字符串表示。
不重写的话,输出的信息没有什么意义。
建议所有子类都重写此方法:
idea下,右键,点击generate找到toString会自动重写。
直接输出一个对象的名称,其实就是调用toString()方法

package com.chen;

public class Student {
    private String name;
    private int age;

    public Student(){}

    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;
    }


    //右键点generate..自动生成
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

}
package com.chen;

public class StudentTest {
    public static void main(String[] args){
        Student s1 = new Student();
        s1.setName("林青霞");
        s1.setAge(27);
        //输出值
        System.out.println(s1.getName()+"---"+s1.getAge());//林青霞---27
        System.out.println("----------------------------");

        System.out.println(s1.toString());//Student{name='林青霞', age=27}
        System.out.println(s1);//Student{name='林青霞', age=27}

        System.out.println(s1.hashCode());//输出了一个int值:1163157884

        System.out.println(s1.getClass());//class com.chen.Student
        String str= s1.getClass().getName();
        System.out.println(str);//com.chen.Student

    }

}

equals()

public boolean equals(Object obj) :指示一些其他对象是否等于此。
注意:Object类里面的equals方法的参数是Object类型的对象。

equals方法比较的是引用类型,默认情况下,比较的是地址值.
我们可以根据具体情况自己重写该方法。
一般重写是自动生成,比较对象的成员变量值是否相同。右键generate—>equals()和hashcode()

//Student.java

package equals;

/**
 * Created by cc on 2018/8/20.
 */
public class Student {
    private String name;
    private int age;

    public Student() {
    }

    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;
    }

    @Override
    //equalsTest.java中:s1.equals(s2)
    public boolean equals(Object obj) {  //传参: 多态 Object obj= Student s2 //this= s1;
        // return super.equals(obj);//自动生成的

        //name是个字符串,是引用类型,String类里面有equals方法,比较字符串的内容是否相同
    /*

        if (this.name.equals(obj.name) && this.age == obj.age) {//报错。注意,我们要使用的name是学生类的特有成员变量

            //应该向下转型
            return true;
        } else
            return false;
    */

        //正确的重写equals的方法
        Student s= (Student)obj;//向下转型
        if(this.name.equals(s.name) && this.age==s.age){
            return true;
        }
        else{
            return false;
        }
        //return this.name.equals(s.name) && this.age==s.age
    }
}
这里写代码片package equals;

/**
 * Created by cc on 2018/8/20.
 */
public class euqalsTest {
    public static void main(String[] args){
        Student s1 = new Student();
        s1.setName("林青霞");
        s1.setAge(27);
        Student s2 = new Student();
        s2.setName("林青霞");
        s2.setAge(27);
        //输出值
        System.out.println(s1.getName()+"---"+s1.getAge());//林青霞---27
        System.out.println("----------------------------");

        System.out.println(s1==s2);//false
        System.out.println(s1.equals(s2));//false this=s1; obj=s2 //Note: 重写为比较对象的成员变量后,这里输出为:true
        Student s3= s1;
        System.out.println(s1.equals(s3));//ture

        Student s4 = new Student();
        s4.setName("萧红");
        s4.setAge(26);
        System.out.println(s1.equals(s4));//false

    }
}

优化刚写的equals方法:提高效率;提高健壮性。
如何判断某个对象是否是某个类的对象?
补充:instanceof关键字
例如:判断对象obj是否为Student类的对象:(obj instance Student)

    public boolean equals(Object obj){// 调用s1.equals(s2) 多态:Object obj= Student s2; this= s1
        //提高效率。自己和自己比较时候
        if(this==obj){
            return true;
        }

        //提高程序健壮性
        //先判断一下,obj是不是Student的对象,如果是,再做向下转型,如果不是,直接返回flase
        if(!(obj instanceof Student)){ //判断obj是不是Student类的对象
            return false;
        }

        Student s= (Student)obj;
        return this.name.equals(name) && this.age==s.age;
    }

finalize()

protected void finalize():当垃圾回收器确定不存在该对象的更多引用时,由对象的垃圾回收器调用此方法。用于垃圾回事,但是什么时候调用去回收不确定。

clone()

protected Object clone():创建并返回此对象的副本
Cloneable:此类实现了Cloneable接口.

猜你喜欢

转载自blog.csdn.net/u013317445/article/details/81813405