equals方法:
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”。
Object类equals方法的源码:
public boolean equals(Object obj) {
return (this == obj);
}
即如果是基本数据类型则比较值本身,如果是引用数据类型则比较内存地址值。
而有的情况下,我们想看一看两个对象的属性是否相等就必须重写equals方法
1.重写的思路
a.判断当前这两个需要比较的对象是否是同一个true
b.判断传递过来的对象是否为null,如果为null,直接返回false
c.判断是否是同一个类型(因为需要向下转型),去比较对应的属性值
d.如果以上都不满足,返回false
重写方法:alt+insert,选择equals() and hashCode()。
public boolean equals(Object obj) {
//增加一个判断,传递的参数obj是this本身,直接返回true,提高程序效率
if(obj==this){
return true;
}
//增加一个判断,传递的参数obj是null,直接返回false,提高程序的效率
if(obj==null){//因为this这个对象在调用equals方法,故不可能为空
return false;
}
//增加一个判断,是Person类型在转换,防止类型转换异常ClassCastException
if(obj instanceof Person){
//使用向下转型(强转)把Object类型转换为Person
Person p = (Person)obj;
//比较两个对象的属性;一个是调用方法的this(p1),一个就是p(obj=p2)
boolean b =this.name.equals(p.name) && this.age==p.age;
return b;
}
//不是Person类型直接返回false
return false;
}
String s1 = null; String s2 = "abc";
System.out.println( s1.equals(s2));
//NullPointerException null是不能调用方法的,会抛出空指针异常
Objects类的equals方法:对两个对象进行比较,防止空指针异常
源码:public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
故上述:System.out.println(Objects.equals(s1, s2));//false
java.util.Date:表示日期和时间的类 Date 表示特定的瞬间,精确到毫秒。
毫秒:千分之一秒 1000毫秒=1秒2088-08-08 09:55:33:333 瞬间
毫秒值的作用:可以对时间和日期进行计算
2099-01-03 到 2088-01-01 中间一共有多少天
可以日期转换为毫秒进行计算,计算完毕,在把毫秒转换为日期
时间原点(0毫秒):1970 年 1 月 1 日 00:00:00(英国格林威治)
注意:中国属于东八区,会把时间增加8个小时即时间原点1970 年 1 月 1 日 08:00:00
把毫秒转换为日期:1 天 = 24 × 60 × 60 = 86400 x 1000 = 86400000毫秒
System.out.println(System.currentTimeMillis());//获取当前系 |
|