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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© limengpiao 中级黑马   /  2014-9-10 15:36  /  1853 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在java和equals和==都是比较两个对象的值是否相等,比如
String a=new String("abc");
String b=new String("abc");
运行的时候发现a==b是false
而a.equals(b)是true
对于这个结果也看了一些资料,但具体还是不太明白,不知道谁能用简洁的语言帮我解答下吗?

13 个回复

倒序浏览

只要是new的对象,都是在内存地址中开辟一个新空间。
== 对于基本数据类型 它比较的是值, 对用引用数据类型它比较的就是对象的地址值,所以a==b是false
equals比较的是对象的内容,所以得出的true

点评

正解,层主回答的很好  发表于 2014-9-11 00:52
回复 使用道具 举报
equals()表示他们对象所对应的值相等的,但是String 对象a 和b 是两个对象,在堆内存中是两块不同德局域 所以“==“的结果是false
回复 使用道具 举报
a==b比较的是地址值,a.equals(b)是调用String类的equals方法,应该是内容的比较吧(具体你要参考java的API),如果还是不懂的话自己去看黑马的自学教程
回复 使用道具 举报
a==b 比较的是引用的地址值。
a和b分别指向的是不同的对象。结果自然是false,
而String类的  a.equals(b)方法是对Object类的equals()方法的覆盖。
它比较的是两个字符串中的内容是否相同。

评分

参与人数 1技术分 +1 收起 理由
舍我其谁 + 1

查看全部评分

回复 使用道具 举报
equals比较的是内容,而==是比较两个字符串的地址。所以如果==对两个String进行比较的话,永远会是false。
回复 使用道具 举报
== 比较的是 内存中的地址值 只要是new 就会出现在内存中出现新的地址 你new了2次 2次的地址值当然不会相同
equals 是 java的 根基类 Object 中的方法 在Object中与 == 一致 比较的都是地址值 所以一般 在子类中都会 重写父类Object中的equals方法 String中重写的equals()方法  比较的是 字符的排列顺序 明白了吗
  有不会的地方希望 朋友指出来 让我学习一下 谢谢了 真心感谢 :hug:
回复 使用道具 举报
a==b  因为是new 的。。都有各自的地址值,肯定不一样的。。。equals比较的是两者的内容,所以相同。。
回复 使用道具 举报
daoqin 来自手机 高级黑马 2014-9-10 23:45:36
9#
一个比较地址,一个比较内容
回复 使用道具 举报
a和b都是new的对象,是在内存地址中开辟一个新空间,都有自己的地址值。 == 对于基本数据类型 它比较的是值, 对用引用数据类型它比较的就是对象的地址值,a和b都是new出来的,所以a==b是false equals比较的是对象的内容,内容都是一样的,所以得出的true
就相当于a和b是两个盒子,里边分别装着一个完全相同的杯子,==就是在比较盒子的摆放位置,而equals是在比较盒子里的东西是不是一样
回复 使用道具 举报
这回复的一个比一个好
回复 使用道具 举报
==比较的引用地址  
equlas比较的是对象本身
回复 使用道具 举报
turan 中级黑马 2014-9-11 10:57:16
13#
2楼正解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马