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));
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。如果要实现所有属性值相同就判断对象相等,请重写那两个方法。