A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘旺 中级黑马   /  2012-7-23 16:04  /  2831 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

判定if (Equals(unity,"水货"))为什么用equals 不用== 有什么不同吗?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

12 个回复

正序浏览
==是比较的是2个对象的地址,而equals比较的是2个对象的内容。
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,new Object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。
equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:
  • String a=new String("foo");
  • String b=new String("foo");

复制代码
两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。
在实际开发中,我们经常要比较传递进行来的字符串内容是否等,例如,String input = …;input.equals(“quit”),许多人稍不注意就使用==进行比较了,这是错误的,字符串的比较基本上都是使用equals方法。
如果一个类没有自己定义equals方法,那么它将继承Object类的equals方法,Object类的equals方法的实现代码如下:
  • boolean equals(Object o){
  • return this==o;
  • }

复制代码
这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object 类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。

http://wenku.baidu.com/view/2d25e10d4a7302768e9939d7.html 这个是百度的文本解释,你可以看看,方便本科学生理解
希望可以帮到你。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
简单的说 "=="比较的是存储位置, "equals"比较的是两个对象的内容!

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 李过 于 2012-7-26 19:55 编辑

Equals前面没加任何访问修饰符,是你在当前类中自定义的一个函数吗? 如果是这样的话, 它跟==有什么区别就得看你这函数怎么写的了.
string类中有两种Equals方法, 一种是静态的, 用法为string.Equals(unity,"水货"), 还有一种为实例的: unity.Equals("水货"), 两者都是判断两个字符串的值是否相等, 还可以在后面加一个StringComparisionOption参数, 设置比较是否区分大小写.

对于string来说,Equals和==都是比较string对象的内容是否相同,ReferenceEquals才是比较引用是否相等。




评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
equals是相等,相等包括了类型。==是相同,也就是值相等。在用==做判断的时候,如果类型不同,根本没有可比性的话,编译是通不过的。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
equals你可以重写,按照你自己的方式比较,默认比较时地址值,而==在比较地址值的时候和equals相同,但是基本数据类型比较时,用==比较又是值的比较。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
李根 中级黑马 2012-7-26 14:50:29
7#
“==”是比较两个对象的地址是否相等,而equals是比较两个对象的内容是否相等。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
在String中,==比较的是两个字符串的内存地址, equals() 比较的是两个字符串内容

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
这是我的总结:
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
==是比较地址的,而equals是比较内容的
基本类型比较就只能用==,不能用equals

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
==比较引用数据类型时,它比较的是两个引用变量是否指向同一个对象.
equals()方法只能比较引用类型,不能比较简单数据类型.该方法是在Object类里面定义的,所以,任何一个类,里面都继承了equals()方法

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
==表示值相等,equals 表示 类型跟值都要相等

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
==是值相等,equals是类型和值都得相当

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
1,==只是值的相等;
2,equals是无论类型和值都相等 。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马