目录
一.定义
- java.long.Object类是Java中所有类的共同父类,不需要显示extends,只要是Java的类,Object都是他们的父类。
- Object类是参数的最高统一类型。
二.特性
1.参数统一化
除了可以接受所有类的对象以外(因为Object是Java中所有类的默认父类),Object还可以接收所有的引用数据类型(接口和数组)。
2.Object类是所有类的父类
正因为Object类是所有类的父类,因此Object类中的所有方法,子类中都有。
(1).toString方法
用来获取一个对象的信息。
当将类的对象直接传入println方法进行输出时,默认就会调用toString(所有对象都具备的方法)。
eg:
Object类中默认的toString方法的源码:
小技巧:在IDEA中查看源码——ctrl+鼠标左键点击。
问:假如我们此时想改变默认输出,不再输出这个地址值而是输出对象的具体属性值,那该怎么做?
答:只需要在对应类中重写toString方法即可。
如:在Student类中重写toString方法。
此时的运行结果:
(2).equals方法
对象比较相等和引用数据类型进行内容比较时,使用equals方法。
关于"==" :在Java中,"==" 操作符返回布尔值,比较两个变量的"数值"是否相等。
变量的存储:
- 对于基本类型,变量存储的就是具体的内容值。
- 对于引用类型,存储的是对象的地址值。
注意:"==" 比较两个引用数据类型,实际就是在比较他俩的地址值是否相等,不会比较内容。
eg:
Java中默认的equals方法的源码:
默认的equals方法的作用其实和 "==" 是一样的,因此,如果我们想比较某个对象的属性值,需要在该对象的类中重写equals方法。
在Student类中重写equals方法:
注意:此时重写的equals方法最后返回时使用的equals方法是String类中的,即作用等同于默认的 "==" 。
验证:
注意:
- 千万小心,"=="在字符串对象和包装类对象中的使用。(在包装类中0~128为true,超出为false)
- 只要使用对象的比较,就使用equals 方法,不使用"=="。
- Object类默认的equals方法其实是和 "=="是一样的。若要进行同一个类的两个不同对象属性值的比较相等,覆写equals方法。JDK的所有常用类型:String,包装类,集合类,都已经覆写了equals方法。
覆写思路:
- 是不是同一个对象。
- 是不是同一个类型。
- 向下转型,比较两个对象具体的属性值。
面试小问题:
问:请说出:"==" 和 equals 的区别?
答:
1. "==" 比较的是两个变量的数值是否相等,对于基本类型,比较的就是具体保存的数值,对于引用类型的地址是否相同。
2. equals 方法是Object类的默认方法,自定义覆写 equals 方法可以按照属性值来比较两个对象的内容是否相等。
总结:引用数据类型:"==" 比较的是地址,equals 比较的是两个对象的属性值是否相等。
如有建议或想法,欢迎一起交流学习~