黑马程序员技术交流社区
标题:
equals和 ==(双等号)的区别?菜鸟虚心求教!
[打印本页]
作者:
周靖轩
时间:
2014-8-16 08:50
标题:
equals和 ==(双等号)的区别?菜鸟虚心求教!
equals和== 的区别是什么啊,什么时候用equals,什么时候用==??之前以为搞明白了,现在又雾了。
菜鸟虚心求教!
作者:
yuZhe_toString
时间:
2014-8-16 09:01
本帖最后由 yuZhe_toString 于 2014-8-16 09:08 编辑
如果比较的对象是引用类型:
== 比较的是两个对象的地址是否相等。
equals 比较的是两个对象的值是否相等,由于equals是object类中的方法,所以这个方法可以被重写,所以说这个比较值可以由创建者来决定。在一些哈希类的容器里,经常需要定义equals方法。
如果比较对象是基本类型:
== 比较的是两个变量的值是否相等。
equals 由于是基本类型,不存在对象的概念,所以更谈不上方法,更涉及不到equals。
以下是String类中 equals 方法的源码,你可以体会一下。
public boolean equals(Object anObject) {
//比较两个对象的引用地址是否相同,若相同,那么不用说别的,两个对象肯定一模一样。
if (this == anObject) {
return true;
}
//若上面不成立,判断两个对象类型是否一致
if (anObject instanceof String) {
//以下是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;
}
复制代码
作者:
ximi
时间:
2014-8-16 09:37
int number1 = 1;
int number2 = 1;
/*
* true
* int为基本类型,所以对比的值即1==1,结果为true
*/
System.out.println(number1 == number2);
String a = new String("a");
String b = new String("a");
String c = new String("c");
//输出a/b/c的哈希码值
System.out.println(a.hashCode());//97
System.out.println(b.hashCode());//97
System.out.println(c.hashCode());//99
/*
* true
* a和b都是对象,所以比较哈希码值,结果97==97为true
*/
System.out.println(a.equals(b));
/*
* false
* 这里比较的内存地址
*/
System.out.println(a == b);
/*
* false
* a和b都是对象,所以比较哈希码值,结果97==99为false
*/
System.out.println(a.equals(c));
/*
* false
* 这里比较的内存地址
*/
System.out.println(a == c);
/*
* equals 和 == 参见下面信息
* http://wenku.baidu.com/link?url=_5wAJQarxUdHotDoyWRbXrMoE7KqaMgwee8qz-ykUne90ZhksHwxoprUpFApGGSRRMrlnlq2IB-WH6Hm3A0LabTV7CDGCT0K4CUM8uFhXPK
*
* hashCode:参见下面信息
* http://www.iteye.com/topic/257191
* http://blog.csdn.net/fenglibing/article/details/8905007
*/
复制代码
作者:
M路
时间:
2014-8-16 11:23
如果就两个对象比,用==比较好,equals方法看怎么定义,里面可能比较很多多西,如果只有一样,就没有必要用equals了
作者:
柳超
时间:
2014-8-16 12:58
个人是这么理解的: == 比较的就是变量本身的值,而equals是给引用型做比较用的,equals会自动去比较引用类型的指向的值!这个如果你自己建立了一个引用类型,也就是一个类,你可以在类中复写equals方法,让系统知道你这个类是怎么样判断两个实例如果相等的!总结:就是系统的基本数据类型用== 引用数据类型用equals 自定的类要自定equals
作者:
谢建平
时间:
2014-8-16 13:52
引用数据类型用equals比较的是地址 不过String 例外 它重写了equals方法,比较的是字符串是否相等。
作者:
安宁.沉睡
时间:
2014-8-16 13:54
equals函数是需要自己重写的根据实际需求,一般要是用类的对象来调用的话比较的是空间地址,和==一样
作者:
挥斥方遒
时间:
2014-8-16 20:11
equels:等于。。。。==:是不是一个东西
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2