1.Object类有哪些方法
1》clone()方法
保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
2》getClass()方法
final方法,获得运行时类型。
3》toString()方法
常用方法,一般子类都会覆盖
4》finalize()方法
该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。
5》equals()方法
该方法是非常重要的一个方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。
6》hashCode()方法
该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。
一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。
7》wait()方法
wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生。
(1)其他线程调用了该对象的notify方法。
(2)其他线程调用了该对象的notifyAll方法。
(3)其他线程调用了interrupt中断该线程。
(4)时间间隔到了。
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
8》notify()方法
该方法唤醒在该对象上等待的某个线程
9》notifyAll()方法
该方法唤醒在该对象上等待的所有线程
===============================================================
2.==和equals()方法的区别
1》Object中的equals()方法就是做==
2》String中重写了equals()方法,在==比较之后还做了值的比较。
==比较地址是否相等
equals先比较地址是否相等,若不相等,再比较值是否相等。
3》上面说的==和equals()是在引用数据类型来说,在基本数据类型上 只有==比较,值是否相等。基本数据类型没有用equals()方法的比较。
===============================================================
3.clone()方法引申出来的克隆,关于深克隆和浅克隆的区别
1》浅克隆概念:仅克隆原对象的值给新的对象,原对象中如果有属性为对象,则仅克隆此属性的引用地址给新对象。即原对象和新对象对于一个属性对象是同一个引用地址。
2》深克隆概念:不仅克隆原对象的值给新对象,也会将原对象中对象属性重新开辟空间给新对象。
相关代码:
package com.sxd.test2; import lombok.AllArgsConstructor; import lombok.Data; @Data @AllArgsConstructor public class Teacher { private int id; private String name; }