Object类的定义及使用

/*
    Object为所有类的父类

    public String toString() 返回该对象的字符串表示 / toString 为 Object类中的方法

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

    getClass().getName() : 全类名(包名加类名)
    Integer.toHexString() : 转十六进制
    hashCode() : 返回对象内存地址 + 哈希算法 算出的整数 (哈希值)
    --------------------------------------------

    细节:使用打印语句,打印对象名时,println方法在语法层面会自动调用对象的toString方法

    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }
*/
public class ToStringDemo {
    public static void main(String[] args) {

        A a = new A();
        System.out.println(a); //object_demo01.A@3b07d329
        System.out.println(a.toString()); //object_demo01.A@3b07d329

        Student s = new Student();
        System.out.println(s.toString());
    }
}

class A {

}

class Student {
    String name;
    int age;
    double grade;

    @Override
    public String toString() {   //toString用法:通过重写输出信息
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", grade=" + grade +
                '}';
    }
}
输出如下:
object_demo01.A@3b07d329
object_demo01.A@3b07d329
Student{name='null', age=0, grade=0.0}

import java.util.Objects;

/*
    Object类中的Equals方法:

        public boolean equals(Object object) : 对象之间进行比较,返回true或者false

            public boolean equals(Object obj) {
                //this : s1
                //obj : s2
                return (this == obj);
            }

            结论:Object类中的equals方法,默认比较的是对象内存地址
            -通常会重写equals方法,让对象之间比较内容

            区分:String类的equals方法默认比较两个字符串的内容(由于相同内容的String对象只会存在一份)
*/
public class EqualsDemo {
    public static void main(String[] args) {

        Student s1 = new Student("张三", 18);
        Student s2 = new Student("张三", 18);

        System.out.println(s1 == s2); //false, 基本数据类型内容使用 == 比较,才会返回true
        System.out.println(s1.equals(s2)); //true (因重写equals方法,所以比较对象内容)

        /*
            Objects类为Object的子类,常用方法有equals和isNull

                public static boolean equals(Object a, Object b)
                    -比较两个对象。底层会先进行非空判断以避免空指针异常。在进行equals比较。
                    -注意: 该方法也依赖于类中重写的equals方法。
                    -好处: 可以避免空指针异常

                public static boolean isNull(Object obj)
                    -判断变量是否为空。
        */
        System.out.println(Objects.equals(s1, s2));
    }
}

class Student {
    String name;
    int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student() {
    }

    @Override
    public boolean equals(Object obj) {
        // this : s1
        // obj : s2
        if (obj instanceof Student) { //测试对象obj是否是Student类的实例
            Student stu = (Student) obj;
            return this.age == stu.age && this.name.equals(stu.name);
        } else {
            return false;
        }
    }
}
输出如下:
false
true
true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值