==; equals

private long userId;
private String nickName;
    
public static void main(String[] args) {
    // TODO Auto-generated method stub
    Fifteen t1 = new Fifteen();
    t1.setUserId(new Long(100001));
    t1.setNickName("s");
    Fifteen t2=new Fifteen();
    t2.setUserId(new Long(100001));
     t2.setNickName("s");
     System.out.println(t1==t2);
     System.out.println(t1.equals(t2));
    

}


输出都为 false;

第一个false比较好理解。==用于判断对象的引用是否相等,想就是判断两个变量是否引用的是同一个对象。这里的两个变量为t1和t2,而且都使用了new关键字,就表示这两个对象都是直接在堆里直接分配空间的,是互相独立存在的对象,故t1和t2指向的是不同的对象,t1==t2,结果false

第二个,equals方法,意义上说是判断两个对象的内容是不是相同,而不是判断它们是不是同一个对象。比如字符串String s1=new String("123"),String s2=new String("123"),如果这个时候输出s1.equals(s2),结果为true,因为尽管s1和s2都是new出来的,是不同的对象,但是它们的内容都是"123",而equals就是比较内容是否相等的,故为true,如果是s1==s2,当然就是false罗
。
但是你这里比较的是自己定义的类Test的两个对象t1和t2是否相等。对于自定义的类,java默认的判断是否相等的规则,不是判断类的每个属性的值是否相同,进而判断这个对象是否相等。而是依赖于对象的hashcode(哈希码)是否相同,两个new出来的对象,哈希码肯定是不同的,除非你自己定义哈希码的生成规则,这个就要自己重写类的equals方法和hashcode方法了。你可以自行百度一下,总之,在自定义对象的比较中,属性值完全相同的对象使用equals做比较,也会得到false。如果要实现所有属性值相同就判断对象相等,请重写那两个方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值