比较“==”和equals
来源:互联网 发布:windows无iis安装 编辑:程序博客网 时间:2024/05/18 13:42
Object的“==”和equals
“==”比较的是引用的地址值;
equals调用的也是“==”这个方法,源码如下:
public boolean equals(Object obj) { return (this == obj);}
所以,如果我们对三个对象o1、o2、o3做比较,结果如下:
Object o1 = new Object();Object o2 = new Object();Object o3 = o2;System.out.println(o1.equals(o2)); // falseSystem.out.println(o1==o2); // falseSystem.out.println(o3.equals(o2)); // trueSystem.out.println(o3==o2); // true
String的“==”和equals
String继承与Object,所以他的==和上面的结果一致,对比的也是对象的引用地址;
String重写了equals方法,比较的是String所代表的字符值;
源码:
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String) anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; } public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.length; i++) { h = 31 * h + val[i]; } hash = h; } return h; }所以对s1,s2,s3的比较有如下结果:
String s1 = new String("aaaaaaa");String s2 = new String("aaaaaaa");String s3 = s2;System.out.println(s1==s2); // falseSystem.out.println(s1.equals(s2)); // trueSystem.out.println(s3==s2); // trueSystem.out.println(s3.equals(s2)); // true
结论
1、基本类型“==”比较的为值比较,对象“==”比较的是对象引用地址的比较;
2、Object.equals比较的为对象引用地址比较,String.equals比较的为引用的字符值;
3、基本类型对应的对象引用,和String一致,即equals比较的也是值比较。
补充知识:
1、hashCode()和(“==”、equals)没关系,作用是:在为对象进行散列的时候,作为key值输入,所以我们的对象的hashCode()尽量不要相同。
2、Object默认提供的实现是:在内存地址的基础上通过特定算法得出的,保证了hash值的不同。
当我们看到hashCode的时候,难道不应该想到hashMap、hashSet等和hash有关的类吗?还是就是重写equals()和hashCode()d的话题。这些另起一片文章来说吧。
0 0
- 比较 EQUALS() 和 ==
- 比较“==”和equals
- equals和==比较
- Equals和==比较
- ==和equals比较
- ==和equals()比较
- ==和equals的比较
- equals 和 ==的比较
- 比较两个变量 ==和equals
- java ==和equals比较
- java 中的==和equals比较
- equals和==的比较
- ==和equals比较运算符
- 比较“==”和equals()区别
- java equals和==比较
- equals()方法和==的比较
- ==和equals比较运算符
- Java 的==和equals比较
- 图片上传本地预览插件v1.3
- 生成的DLL出现错误随笔
- jquery dialog 属性详解
- 剑桥雅思1-9下载地址
- Android Sip学习(准备知识)SIP 协议完整的呼叫流程
- 比较“==”和equals
- ip_vs实现分析(1)
- java中的修饰符作用范围
- java对redis的基本操作
- source insight 增加对lua语言的支持配置
- 如何用Maven创建web项目(具体步骤)
- android中抗锯齿的设置
- 亿推推分销好吗
- memcpy的用法