目录
一、为什么要学习Objects
当我们遇到一些类对象是null空指针时,我们代码又要调用类方法,就会出现错误,此时我们一般的解决方法就是用if-else结构判断是不是空指针,然而我们用Objects工具类解决这个问题更为简单。
二、Objects的成员方法
public static boolean equals(Object a,Object b); 先做非空判断 再比较两个对象
public static boolean isNull(Object obj) 判断对象是否为null 为null返回true 反之
public static boolean nonNull(Object obj) 与isNull相反
1.equals
先构造一个persons类
class persons{
int age;
String name;
public persons(){
}
public persons(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试案例:
persons a=new persons(15,"james");
persons b=new persons(14,"lebrons");
persons c=new persons(15,"james");
person d=null;
boolean result1=Objects.equals(a,b);
boolean result2=Objects.equals(a,c);
boolean result3=Objects.equals(d,a);
System.out.println(result1);
System.out.println(result2);
System.out.println(result3);
运行结果:
都是false 分析equals的细节
细节:
1.equals方法的底层会判断里面的第一个类是否有null 如果有一个null 直接返回false
2.如果没有null 那么就会利用第一个类来调用equals方法
3.此时第一个类a是persons类型,所以最终还是会调用persons中的equals方法
4.没有重写 persons中也默认有equals方法 但是比较的是地址值
5.如果重写了 比较属性值 所以这边a 和 c的属性值一样 但地址值不一样 比较的结果依旧是false
我们可以
重写equals:
@Override
public boolean equals(Object a){
if(this==a)return true;
if(this==null||getClass()!=a.getClass())return false;
persons b=(persons)a;
return this.getAge()==b.getAge()&&this.getName()==b.getName();
}
运行结果:
2.isNull 、nonNull
测试案例:
System.out.println(Objects.isNull(a));
System.out.println(Objects.isNull(d));
System.out.println(Objects.nonNull(a));
System.out.println(Objects.nonNull(d));
运行结果: