黑马程序员技术交流社区

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

作者: 黑马-邢广耀    时间: 2012-12-26 09:24
标题: ==和equals
本帖最后由 黑马-邢广耀 于 2012-12-27 10:09 编辑

这两天学习遇到这样一个问题,就是判断两个对象是否相等的时候,什么情况下该用“==”,什么时候该用equals呢?
作者: 谢辉林    时间: 2012-12-26 09:34
首先说一下值类型和引用类型的区别值类型是存储在内存中的堆栈(简称栈),而引用类型的变量在栈中仅仅是存储引用类型
变量的地址,而本身则存在于堆中,即平时所说的值类型存在在栈中,引用类型存在于堆中

1:对于值类型==和equals是等价,都是比较在栈中栈中的值。

2:对于引用类型,==比较的是引用类型在栈中的地址,equals方法比较的是引用类型在堆中的值。

3:对于String类要特殊处理,它是一个内部已经处理好了equals方法和==的类,故==和equlas是等价的。
作者: netboy032    时间: 2012-12-26 09:58
这里说下引用类型的比较,==在引用类型中表示比较的是地址是否相同。如果是Object类中的equals方法,它和==相同,也是地址;
这时你可以重写它。如果是String类中的equals方法,它比较的就是两个引用类型的值是否相同
作者: 何创    时间: 2012-12-26 10:43
== 和equals()两种比较方法记住下面的法则 就容易多了。
1、如果测试两个简单类型的数值是否相等,则一定要用“==”来比较;
2、如果要比较两个引用变量对象的值是否相等,则要用对象的equals()方法进行比较;
3、如果需要比较两个引用变量是否指向同一对象,则使用“==”来进行比较;
作者: 黄锦成    时间: 2012-12-26 11:01
==是用来比较对象的内存地址是否一致,一致则是同一对象

equals用来比较对象的内容,如比较两个字符串的内容是否一致,

通常用equals比较字符串内容:str1.equals(str2);
作者: 水天    时间: 2012-12-26 14:10
假设有两个一样箱子,里面都各自装了一本以样的书。如果你想判断这两个箱子是不是同一个箱子,就用==。
如果你想判断箱子里装的东西是否一样,就用equals.
作者: 黑马-邢广耀    时间: 2012-12-27 01:25
懂了,谢谢





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