Java-Object父类
继承作为java的特色之一 Object就是java中每一个类的父亲
Object类的常用方法
记住 object内的方法通常是不可用的 都是需要我们在自定义类中进行重写 毕竟是所有类的父亲 里面的方法肯定不会特别有实际作用
1.toString() 方法
Object父类中toString 默认是打印对象的地址 但是这个通常无法反映对象的属性特征
因此我们在子类中重写toString的时候 会单独的返回出子类的成员变量等特征 说白了就是自己想打印什么就写什么而已
然后值得一提的是 sout(对象名) 直接调用的就是toString方法 其它也就没什么强调的了
2.equals()方法
这个方法很有必要好好学习 大厂的面试题里面会出现
首先Object的中的equals方法是直接比较两个对象的地址值 也就是说 一定要是同一个对象 才会返回true 假如你仅仅是对象的成员变量相同 但是是两个不同的对象 那也是false
这显然不是我们想要看到的 所以Object的equals方法不好用 我们得自己重写来比较
但是呢 Java中常见类都已经帮我们重写好了equals方法 就比如 String ArrayList 这些方法使用起来都说很顺手的 就比如比较字符串内容 String.equals() 就不会出现只比较字符串地址的情况
但是这里还是有道大厂面试题
1 | String s1= new String("123") |
两个输出的语句的结果都是false
因为在String类中重写的equals方法中 它是先比较对象的地址 如果不同 那就判断是否是String 对象然后在去比较字符串的内容 但是这里的StringBuilder并不是String类 所以返回false
而StringBuilder这个类甚至都没有重写equals方法 用的甚至是Object类中的方法 那更是只比较两个对象的地址值 所以返回false
3.clone()
很好理解 就是将一个对象的值复制给另一个对象
但是这里就是需要搞清楚 浅克隆和深克隆的区别
其实很好懂
浅克隆 中的 引用数据类型 比如数组 它是和原对象共享同一个数组地址 所以原对象的数组发生改变 它本身的数组也会发生改变 这就是浅克隆
那么深克隆就重新创建一个新的数组 那两个数组就是独立的个体 互不干扰
Object中默认的clone就是浅克隆 如果想实现深克隆 要么自己重写 要么使用第三方工具代码
Objects类
它和Object类有些不同 Objects类是一个工具类 提供一些方法去完成某些功能
1.equals方法
Objects类中的equals方法就是多了一个非空判断而已
1 | public static boolean equals(Object a, Object b) { |
实际上还是会去调用a的equals方法 我们还是要重写
2.isNull方法
没什么好说的 就是判断对象是否为空的一个方法