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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© heheka123 中级黑马   /  2014-4-20 11:51  /  1609 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

==操作符专门用来比较变量的值是否相等。比较好理解的一点是:
int a=10;
int b=10;
则a==b将是true。
但不好理解的地方是:
String a=new String("foo");
String b=new String("foo");
则a==b将返回false。
这是什么原因???

点评

这个问题都不知道问了多少遍了,你自己去论坛里看看吧,再去阅读一下版规,否则我们将进行扣分处理  发表于 2014-4-20 12:48

7 个回复

倒序浏览
equals方法比较的是两个对象是不是同一对象, ==比较的是对象在"栈"内存中的引用地址, String a=new String("foo");  String b=new String("foo"); 这里实际上是new出来了两个对象, 那么他们的地址值肯定是不会相同的.
回复 使用道具 举报
本帖最后由 anqi 于 2014-4-20 12:04 编辑

==在比较非基本数据类型,也就是对象的时候,是比较内存其地址值的
String a=new String("foo");
String b=new String("foo");
上面的语句new了3个对象,一个是a指向的堆内存 ,一个是b指向的堆内存(new的含义就是在堆内存中分配一片空间)
所以a和b的地址值不同。则a==b将返回false。
而“foo"有自身的保存位置,它在常量池中,不论你建立多少个都只要是“foo"就会是那一个。
String a="foo";    String b="foo"; 这样a==b就是true了因为内存的地址值是一个。
至于equals  它是对象继承自Objec类的方法,我们可以复写这个方法。建立我们自己的判断条件。
String类也复写了这个方法,它比较的是a和b 的内容。所以a.equals(b) 返回的是ture

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报 1 0
如果是用equals判断的话结果是true,因为它们是一个对象

BaiduShurufa_2014-4-20_12-3-1.png (93.33 KB, 下载次数: 13)

BaiduShurufa_2014-4-20_12-3-1.png
回复 使用道具 举报
==比较基本数据类型,就是看值是否相等,这个应该都理解
==在比较非基本数据类型,也就是引用数据类型的时候,是比较内存其地址值是否相等

equals方法是Object中的方法,默认也是比较2个对象的地址值的,所有的自定义类在没有声明的情况下
都是都继承了Object,所以也是比较地址值.   如果你想比较内容,就要在自定义的类中重写equals方法即可
<回答完毕>!
回复 使用道具 举报
equals 只是比较值是否相同 , ==是比较两个对像的值是否指向同一地址空间 在java中,每定义一个变量都给其分配一个内存空间 String a="foo";  String b="foo"; 用==和equals比较都能得到正确的结果,因为a和b指向了同一内存空间. String a=new String("foo");  String b=new String("foo");  用==去做比较会得到false。b赋值时又新定义了一个内存空间  这时候就只能用equals;
回复 使用道具 举报
idream 中级黑马 2014-4-20 21:06:55
7#
区别:
        1,==号是一个比较运算符,equals是一个方法
        2,==号既可以比较基本数据类型,也可以比较引用数据类型,equals方法只能比较引用数据类型
        3,如果某个类没有重写Object这个类中的equals方法,那么比较引用数据类型,==号和equals方法是一样的结果,    如果重写Object这个类的equals方法,都是比较的是内容,比如说两个人比较,就不再比较他们的地址值,而是比较他们的姓名,年龄

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

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