Java Object类的使用介绍
一、Object类概述
- Object类是所有类的父类,Java中的所有类都直接与间接的继承了Object类。
- 如果一个类没有指定父类,那么默认继承Object类
二、toString方法
返回该对象的字符串表示。
通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。
结果应是一个简明但易于读懂的信息表达式。
1.方法摘要
方法信息:
public String toString()
返回:
该对象的字符串表示形式。
2.重写toString方法
为什么要重写toString方法
当打印一个对象名称时,如果不重写toString方法,那么将会打印出对象的地址值,实际运用中意义不大,这是由Object类决定的。要想改为要想打印的信息,就必须对toString方法进行重写。
代码实例
新建Person类
public class Person [extends Object]{
    private String name;
    private int age;
    public Person() {}
    public Person(String name, int age) {this.name = name;       this.age = age;}
    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;}
    /*
    直接打印对象的地址值没有意义所以要重写Object类的toString方法
     */
    @Override
    public String toString() {
        return "Person{name = "+ name+",age = "+age +"}";
    }
    //toString也可以使用集成开发环境直接生成
}
新建测试类,使用toString方法
public class TestToString{
    public static void main(String[] args) {
        //Person类默认继承Object类,所以我们可以使用Object类的toString方法(返回值为String)
        Person p = new Person("张三丰",18);
        //如果在Person中没有重写toString方法,则打印对象的地址值
        //如果在Person对toString方法进行了重写,则按照指定格式打印
        System.out.println(p.toString());
        System.out.println(p);
    }
}
【tips】
看一个类是否重写了toString方法,直接打印这个对象名
如果直接打印出地址值说名没有重写toString方法
如果重写了toString方法,会按照指定格式输出
三、equals方法
指示
其他某个对象是否与此对象“相等”。
源码:
public boolean equals (Object obj){
return (this == obj);
}
1.方法摘要
方法信息:
public boolean equals(Object obj)
参数:
obj - 要与之比较的引用对象
返回:
如果此对象与 obj 参数相同,则返回 true;否则返回 false。
2.默认地址值比较
继续使用上述Person类
新建测试类,使用equals方法
public class TestEquals {
    public static void main(String[] args) {
        /*
        Person类默认继承Object类,所以可以使用equals方法,指示另外一个对象与当前对象是否相等
         */
        Person p1 = new Person("张三",18);
        Person p2 = new Person("李四",20);
        System.out.println(p1.equals(p2));//打印结果:false
        //把p2赋值给p1
        p1 = p2;
        System.out.println(p1.equals(p2));//打印结果:true
    }
}
【tips】
对于
基本数据类型,比较的是值
对于引用数据类型,比较的是地址值
3.对象内容比较
和toString方法一样,equals方法也是使用的地址值进行比较,意义不大。要
进行对象属性的比较,依旧需要重写equals方法。
在Person类中重写equals方法(集成开发环境也可以生成,推荐自己写一下,体会原理)
    @Override
    public boolean equals(Object obj) {
        //增加判断,如果对象参数为自己,直接返回true
        if(obj == this){
            return true;
        }
        //增加判断,如果对象为空,直接返回false,提高程序运行效率
        if(obj == null){
            return false;
        }
        //增加判断,防止类转换异常
        if(obj instanceof Person){
            //使用向下转型,才可以使用子类特有的属性和方法
            Person p = (Person)obj;
            //比较两个对象的属性
            boolean b = this.name.equals(p.name) && this.age == p.age;
            return b;
        }
修改测试类
public class TestEquals {
    public static void main(String[] args) {
        /*
        Person类默认继承Object类,所以可以使用equals方法,指示另外一个对象与当前对象是否相等
        源码:
        public boolean equals (Object obj){
            return (this == obj);
        }
         */
        Person p1 = new Person("张三",18);
        Person p2 = new Person("张三",18);
        System.out.println(p1.equals(p2));//打印结果:true
        //虽然是两个对象,但是他们的内容一样。
        //根据我们重写的equals方法,所以返回true
}
四、Objects类
从 jdk1.7 开始,才有Objects类
类的基本信息
public final class Objects extends Object
该类由一些静态方法组成,并声明为最终类不可被其他类继承。
这些方法是 null -safe(空指针安全的)或 null(容忍空指针的)方法。
计算对象的hashcode,为对象返回一个字符串,并比较两个对象。
public class DemoObjects {
    public static void main(String[] args) {
        String str1 = null;
        String str2 = "csdn";
        //使用String类的equals方法比较
        System.out.println(str1.equals(str2));//发生空指针异常,代码报错
        //使用Objects类的equals方法比较
        System.out.println(Objects.equals(str1,str2));//程序正常运行,false
    }
}
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号