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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© FlyMeToTheMoon 中级黑马   /  2014-11-17 19:11  /  2271 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有大神讲解一下吗 迷惑很久了

12 个回复

倒序浏览
==两边是基本数据类型,比较数值是否相等,是引用数据类型,比较对象地址是否相同;
equals用于对象比较,比较的是对象的值是否相同;
回复 使用道具 举报
  1. String a = "abc";
  2.                 String b = new String("abc");
  3.                 String c = "abc";
  4.                 System.out.println(a==b);
  5.                 System.out.println(a.equals(b));
  6.                 System.out.println(a==c);
  7.                 System.out.println(b==c);
复制代码

我也是菜鸟,大家回帖指点下
用毕老师经典案例解释下,
这个程序里按顺序首先常量池(串池)创建一个"abc",用指针a指引
然后b用了 new String(“abc”),用构造函数新创建了一个对象,但是这个“abc”是存在堆中,
于是当c="abc"时,就是串池中"abc"有两个引用,而b中建立的对象在堆中,所以以上答案是
false true true false
接下说==和equal
==比较的是内存中的地址值
equal方法是你可以通过复写来确定两个对象中的是否相等
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y(既是存在指针),当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。

注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
所以String 是一定重写equals方法确保字符的数据是相等,只是String方法不允许你继承重写的


评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
==,如果是基本数据类型,比较的是值是否相等,如果是引用数据类型,比较的是地址值是否相同,equal方法比较的是什么,得看equals如何定义的,object类中定义的equals跟==一样

评分

参与人数 1黑马币 +6 收起 理由
杨佳名 + 6

查看全部评分

回复 使用道具 举报 2 0
学习一下
回复 使用道具 举报
支持楼上的大神们!
回复 使用道具 举报
注意equals 方法在这个类中是否被覆写  ~~ 这个是个坑 楼主千万要注意
回复 使用道具 举报
举个例子。如果不复写String的equals()方法,两个相同的字符串对象比较,==是false, equals()是true。
回复 使用道具 举报
学习了!
回复 使用道具 举报
yfdsn 初级黑马 2014-11-24 11:02:15
10#
==操作符专门用来比较变量的值是否相等,对象变量其实是一个引用,它们的值是指向对象所在的内存地址,而不是对象本身Object对象默认使用了==操作符。所以如果你自创的类没有覆盖equals方法,那你的类使用equals和使用==会得到同样的结果
回复 使用道具 举报
== 肯定是数值比较了,有可能是对象或数组地址值也可能是变量值,equals 是方法,关键看它的实现过程, java.lang.Object类中的实现是
  1. public boolean equals(Object obj) {
  2.         return (this == obj);
  3.     }
复制代码


所以对象在不覆盖equals方法的情况下 都用了 ==
回复 使用道具 举报
== 比较得如果是基本数据类型的话比较的就是值得大小 如果是引用数据类型比较得就是地址值
equals  是分情况的有没有重写他的方法 ,比如String类就重写了equals 方法  比较得就是字符串得内容是否相等
回复 使用道具 举报
==是比地址值,equals是重新创建对象后比较里面内容
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马