Object和Objects
文章目录
Object
Object是Java中的顶级父类,所有的类都直接或间接的继承于Object类、
Object类中的方法可以被所有子类访问
Object的构造方法
public Object() //空参构造
在顶级父类中只有无参构造
Object的成员方法
方法名 | 说明 |
---|---|
public String toString() | 返回对象的字符串表示形式 |
public boolean equals(Object obj) | 比较两个对象是否相等 |
protected Object clone(int a) | 对象克隆 |
public String toString()
Object obj= new Object();
String str1 = obj.toString();
System.out.println(str1);
运行结果如下
以“@”为界分为两部分
在Object文件下,toString的代码就是返回这种形式
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
如果想要改变形式的话,可以重写toString
public boolean equals(Object obj)
Person p1=new Person();
Person p2=new Person();
boolean reault=p1.equals(p2);
System.out.println(reault);
运行结果直接会报false
-
如果没有重写equals方法,那么默认使用Object中的方法进行比较,比较的是地址值是否相等
-
根据要求可以对equals进行重写,重写之后就可以比较属性值了
protected Object clone(int a)
对象克隆:把A对象的属性值完全拷贝给B对象,也叫对象拷贝,对象复制
-
浅克隆:引用数据类型会直接克隆地址值,当两个对象中的一方进行了修改,就都会修改
-
深克隆:引用数据类型不会直接克隆地址值,会重新创建一个,两者互不影响,字符串会复用
其中Object的克隆clone就是浅克隆,如果要将浅克隆转化为深克隆,需要重写Object方法
//以重写Object的clone方法来实现数组的深克隆为例
@Override
protected Object clone() throws CloneNotSupportedException {
//先把被克隆对象中的庶族获取出来
int[] date = this.date;
//创建新的数组
int[] newOate = new int[date.length];
//拷贝数组中的数据
for (int i = 0; i < date.length; i++) {
newOate[i] = date[i];
}
//调用父类中的方法克隆对象
Person u = (Person) super.clone();
//因为父类中的克隆方法是浅克隆,替换克隆出来对象中的数组地址值
u.date = newOate;
return u;
}
Objects
Objects是一个工具类,提供一些方法去完成一些功能
Objects的成员方法
方法名 | 说明 |
---|---|
public static boolean equals(Object a,Object b) | 先做非空判断,比较两个对象 |
public static boolean isNull(Object obj) | 判断对象是否为null,为null返回true,反之返回false |
public static boolean nonNull(Object obj) | 判断对象是否为null,跟isNull的结果相反 |
public static boolean equals(Object a,Object b)
下面是Objects的成员方法equals的源码
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
可以通过源码看出来,是会判断a是否为null,如果为null,直接返回false
如果a不为null,那么就利用a再次调用equals方法
此时根据a的类型,调用该类型中的equals方法
如果没有重写就睡比较地址值,如果重写了,就会根据情况进行比较
public static boolean isNull(Object obj)
实例演示
Person p1 = null;
Person p2 = new Person();
System.out.println(Objects.isNull(p1));
System.out.println(Objects.isNull(p2));
结果如下
源码展示
public static boolean isNull(Object obj) {
return obj == null;
}
public static boolean nonNull(Object obj)
实例展示
Person p1 = null;
Person p2 = new Person();
System.out.println(Objects.nonNull(p1));
System.out.println(Objects.nonNull(p2));
结果如下
源码展示
public static boolean nonNull(Object obj) {
return obj != null;
}