黑马程序员技术交流社区

标题: equals和==的应用 [打印本页]

作者: 胥文    时间: 2013-1-24 22:25
标题: equals和==的应用
本帖最后由 胥文 于 2013-1-25 09:01 编辑

个人认为equals和==是一样的,感觉equals就像语言中的书面语正式一点,而==就像语言中的口语,非正式一点
求正解
作者: 黑马刘杰    时间: 2013-1-24 22:30
这个问题论坛里有很多解释,你再搜搜吧。。。
作者: 折纸时代    时间: 2013-1-24 22:40
equals没有被重写之前 效果和"== "是一样的, 就是判断的值,必须来自同一对象.

但是,包装类和String类 等修改了equals方法, 其作用是判断两边对象的字符序列或者值是否相同,

而不再去管是否来自同一对象.
作者: 胥文    时间: 2013-1-24 22:41
黑马刘杰 发表于 2013-1-24 22:30
这个问题论坛里有很多解释,你再搜搜吧。。。

白天要上班,晚上回来要看视频,写博客,所以看贴的时间很少

作者: 胥文    时间: 2013-1-24 22:43
司懿卓 发表于 2013-1-24 22:40
equals没有被重写之前 效果和"== "是一样的, 就是判断的值,必须来自同一对象.

但是,包装类和String类 等修 ...

何为包装类,我第一次听说
可以帮我解释一下吗
作者: 黑马张英涛    时间: 2013-1-24 22:46
对应8大基本类型的对象类型类都是包装类,就Integer,Float,Character那些
作者: jonn    时间: 2013-1-25 01:03
帖子里解释不全面,其实这实际上就是典型享元模式的运用....LZ自己问谷歌大神....
作者: 郭孟涛    时间: 2013-1-25 04:53
本帖最后由 郭孟涛 于 2013-1-25 05:02 编辑

“= =”操作符用于比较两个对象的内存地址值是否相等,equals()方法用于比较两个对象的内
容是否一致。

一定要记住:“==”是比较内存地址值的,“equals”是比较内容的。


“==”举例

黑马训练营地址是:北京市海淀区东北旺西路8号中关村软件园9号楼国际软件大厦

“equals”举例

张三和李四、王五都是黑马训练营的学员。如果判断他们都是学员是正确的,但是如果判断他们是一个人吗就不是了。


作者: 梁俊    时间: 2013-1-25 08:08
本帖最后由 梁俊 于 2013-1-25 08:12 编辑

==操作符,用来比较引用类型对象的地址值,或者比较基本数据类型的值

equals
(1)如果一个类没有自己定义equals方法,那么它将继承Object类的equals方法,Object类的equals方法的实现代码如下:
    boolean equals(Object o){
     return this==o;
}
这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object 类继承的)就是使用==操作符,
是在比较两个变量指向的对象是否是同一对象(也就是两个变量的地址值进行比较),这时候使用equals和使用==会得到同样的结果
(2)常用的String类是重写了Objet类的的equals方法, 是用于比较两个独立对象的内容是否相同
例如,对于下面的代码:
     String a=new String("foo");
     String b=new String("foo");
两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,
这是两个不同的对象,它们在内存中的地址值是不同的,
所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。
(3)
如果一个类没有自己定义equals方法,它默认的equals方法(从Object 类继承的)就是使用==操作符,
就是在比较两个对象的地址值是否相等,这时候使用equals和使用==会得到同样的结果。
如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals方法,
由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。
作者: 刘军亭    时间: 2013-1-25 08:12
基本类型用==比较的是自身的数值。如int i = 1; int j = 2; System.out.println(i == j); 肯定是不等的,如果 i 和 j 的值一样,那用==比较就是true了。

所有的对象都是Object,对象用==比较的是内存地址值,也就是对象的hashCode码,创建自己的类时必要时会复写equals方法,让对象具备某种比较。
String类型复写了equals方法,所以你比较两个String时候比较的是字符串是否相等
作者: niumengliang    时间: 2013-1-25 10:26
其实说白了,就是==比较的是内存地址,equals比较的是两个数据的内容
作者: 高浩    时间: 2013-1-25 13:26
==,是基本数据类型用来比较值,引用数据类型比较地址的。
equals,是引用数据类型用来比较内容的。
作者: 折纸时代    时间: 2013-1-26 14:38
胥文 发表于 2013-1-24 22:43
何为包装类,我第一次听说
可以帮我解释一下吗

如何实在不懂的话就多看视频.   自己去理解才是王道..  




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