equals的用法

only_forever 2007-08-22 11:05:53
通常“==”用于比較基本類型,equals比較的是對象。

但是我現在有個疑問:

class Warehouse
{
public static void main(String args[])
{
Golfball gb1=new Golfball("BrandX","Professional",100);
Golfball gb2=new Golfball("BrandX","Professional",100);

if(gb1.equals(gb2))
System.out.println("equals");
else
System.out.println("not equals");
}
}

輸出的是:not equals
哪位大蝦幫忙解釋一下!!
...全文
1353 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ponlya 2008-11-24
  • 打赏
  • 举报
回复
一般而言,==是来比较值的,equals是用来比较对象是不是相同的
only_forever 2007-10-28
  • 打赏
  • 举报
回复
謝謝各位。。結貼啦~~
yan53125 2007-08-22
  • 打赏
  • 举报
回复
有一个RexxxxEquals 是比较引用的,当比较值类型的时候是有区别的
tsy_zx 2007-08-22
  • 打赏
  • 举报
回复
vrhero(我是真小人/最烦伪君子...)
说的已经很全面了
tsy_zx 2007-08-22
  • 打赏
  • 举报
回复
==如果是值类型,那么比较值,然后看有没有运算符重载,如果有那么用运算符重载比较,要不就调用Equals比较,我记得我看过Equals一般来说是调用GetHashCode来比较的(这个不知道对不对),引用类型比较的就是地址,地址不同就不同了。
only_forever 2007-08-22
  • 打赏
  • 举报
回复
那能不能給偶舉個例子啊?謝謝啦~~
vrhero 2007-08-22
  • 打赏
  • 举报
回复
对你这个例子而言,Equals 和 == 是一样的...
vrhero 2007-08-22
  • 打赏
  • 举报
回复
Golfball gb1=new Golfball("BrandX","Professional",100);
Golfball gb2=new Golfball("BrandX","Professional",100);
-----------
gb1和gb2只是类型相同不是同一引用...所以 Equals 不相等...

至于 == 运算符,对于预定义的值类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回 false。对于 string 以外的引用类型,如果两个操作数引用同一个对象,则 == 返回 true。对于 string 类型,== 比较字符串的值。

所以 gb1 != gb2...
only_forever 2007-08-22
  • 打赏
  • 举报
回复
你寫的這個我能理解,但是我寫的那個,是不是就僅僅比較的是地址??
但是“==”是比較地址啊!!
55555~~~~~不好意思,小妹理解能力較差!!
vrhero 2007-08-22
  • 打赏
  • 举报
回复
Equals 的默认实现仅支持引用相等,但派生类可重写此方法以支持值相等。对于引用类型,相等定义为对象相等;即这些引用是否引用同一对象。对于值类型,相等定义为按位相等。

显然你理解错了...

Golfball gb1=new Golfball("BrandX","Professional",100);
Golfball gb2=gb1;

gb1.equals(gb2) == true

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧