您的位置:首页 > 其它

==; equals

2015-12-18 10:19 204 查看
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。如果要实现所有属性值相同就判断对象相等,请重写那两个方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: