黑马程序员技术交流社区

标题: ==和equls的区别 [打印本页]

作者: 孙汇川    时间: 2012-2-16 12:04
标题: ==和equls的区别
本来是个问题,后来找到了答案,在这里跟大家分享一下,不很明白的看一下。

"=="与"equls"   

equals 方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等。 ==用于比较引用和比较基本数据类型时具有不同的功能: 比较基本数据类型,如果两个值相同,则结果为true ;而在比较引用时,如果引用指向内存中的同一对象,结果为true

作者: 余松霖    时间: 2012-2-16 12:11
运用在基本数据类型时  两者没什么区别,都是比的值是否相等   建议使用 ==
运用在引用数据类型时  ==比的是引用也就是指向的内存地址是否相等    equals比的是值也就是你说的内容是否相等。并不是光你说的String类是这样  只要是引用数据类型
作者: 彭小芳    时间: 2012-2-16 12:18
==与equals的区别

==是用来判断数据存放的地址是否相同
equals是用来判断数据存放地址中的内容是否相同

通俗点的讲吧,==就是比较两个对象的在内存中的地址是否是同一个地址。例如:String str1="abc"; String str2 = str1;那么str1==str2 为 true.它们指向的就是同一个地址。而equals 是比较两个对象的内容。
作者: 冯祖焱    时间: 2012-2-16 12:19

==和equals是不等价的
指示其他某个对象是否与此对象“相等”。
对于字符串的创建比较特殊,因为字符串还有一个字符串池的概念:
String str1="abc";
String str2="abc";
System.out.println(str1==str2);//此时会返回true
另外一种写法是:
String str1=new String("abc");
String str2=new String("abc");
System.out.println(str1==str2);//此时会返回false
这就是字符串池的知识了,如果是原始类型的话,其实用==和用equals基本上都等得到同样的结果,
建议判断两个引用类型的话,最好用equals方法。
equals 方法在非空对象引用上实现相等关系: (以下是equals方法在javaSE中的原话)

自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
对于任何非空引用值 x,x.equals(null) 都应返回 false。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
作者: 彭坤    时间: 2012-2-16 13:19
简单点理解:
==:比较的对象的内存地址是否相同,也就是说两者是否为同一对象。
equals方法:equals比较的是两者的内容是否相同
大多数情况下(就是没重写equals的情况)==与equals是等价的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2