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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-邢广耀 中级黑马   /  2012-12-26 09:24  /  1940 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马-邢广耀 于 2012-12-27 10:09 编辑

这两天学习遇到这样一个问题,就是判断两个对象是否相等的时候,什么情况下该用“==”,什么时候该用equals呢?

评分

参与人数 1黑马币 +3 收起 理由
刘芮铭 + 3 建议多关注论坛,这种问题论坛已经很多.

查看全部评分

6 个回复

倒序浏览
首先说一下值类型和引用类型的区别值类型是存储在内存中的堆栈(简称栈),而引用类型的变量在栈中仅仅是存储引用类型
变量的地址,而本身则存在于堆中,即平时所说的值类型存在在栈中,引用类型存在于堆中

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

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

3:对于String类要特殊处理,它是一个内部已经处理好了equals方法和==的类,故==和equlas是等价的。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
这里说下引用类型的比较,==在引用类型中表示比较的是地址是否相同。如果是Object类中的equals方法,它和==相同,也是地址;
这时你可以重写它。如果是String类中的equals方法,它比较的就是两个引用类型的值是否相同

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
== 和equals()两种比较方法记住下面的法则 就容易多了。
1、如果测试两个简单类型的数值是否相等,则一定要用“==”来比较;
2、如果要比较两个引用变量对象的值是否相等,则要用对象的equals()方法进行比较;
3、如果需要比较两个引用变量是否指向同一对象,则使用“==”来进行比较;

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
==是用来比较对象的内存地址是否一致,一致则是同一对象

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

通常用equals比较字符串内容:str1.equals(str2);

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
假设有两个一样箱子,里面都各自装了一本以样的书。如果你想判断这两个箱子是不是同一个箱子,就用==。
如果你想判断箱子里装的东西是否一样,就用equals.

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

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