==; 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;
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。如果要实现所有属性值相同就判断对象相等,请重写那两个方法。
相关文章推荐
- python的unittest框架用例失败重运行解决方法
- Cleanup failed to process the following paths错误的解决
- Linux指令--head,tail
- rtp的封包与拆包h264
- Idea配置
- 整理: php常用函数收集并附解释说明
- Setting Up File Sharing
- JAVA / Scala Multi Class in One Source File
- 关于百度ueditor的工具栏中文乱码的解决方案。
- 笔记一:登录问题
- OC学习 第六节
- UIPIck 时间选择器
- 轻量级JavaEE企业应用实战(八)
- Android 监听键盘的弹起与收缩
- 问题:C#将base64转换成二进制图片;结果:c# Base64编码和图片的互相转换代码
- 正则表达式的基本语法
- 根据一些资料整理的PowerBuild常用事件
- ifstream ofstream 读写文件异常
- 推荐一篇非常不错的关于Linux系统硬盘、分区及文件系统的基本概念介绍文章
- 启发式算法(heuristic algorithm)