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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘笑 中级黑马   /  2012-6-12 16:02  /  3233 人查看  /  12 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘笑 于 2012-6-12 19:33 编辑

最近逛论坛,发现很多人搞不明白==与equal的区别,特地查了一下资料,加上自己的理解整理如下:

==操作符专门用来比较变量的值是否相等;对象内容的比较,则是equals方法做的事。比如:
int a=10;
int b=10;

则a==b将是true。
  
String c=new String("foo");
String d=new String("foo");

则c==d将返回false。
对象变量其实是一个引用,它们的值是指向对象所在的内存地址,而不是对象本身。c和d都使用了new操作符,意味着将在内存中产生两个内容为"foo"的字符串,既然是“两个”,它们自然位于不同的内存地址。所以使用"=="操作符,结果会是false。但由于equal比较的是内弄,所以如果System.out.println(c.equals(d));的话则输出true!

  oh yeah!

12 个回复

倒序浏览
总结的不错
回复 使用道具 举报
==:等于。当比较的都是数值形的。即使数据类型不同,只要值相同返回结果true。当比较引用类型时引用类型必须相同,才能比较。object类提供的equals方法要求引用变量指向同一个对象时返回true.由于string类重写了object的equals方法,只要引用的两个字符串所包含的字符序列相同,返回true.
回复 使用道具 举报
不是“=”而是“==”
回复 使用道具 举报
同意楼上的, 是“==”和 equals 标题2个都错了...

去掉这2个错误,内容总结的还不错。
回复 使用道具 举报
= =操作符比较的是操作符两端的操作数是不是同一个对象,而且= =操作符两边的操作数必须是同一类型的才能编译通过。= =比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为treu,如:int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为他们都指向地址为10的堆栈。
String的equals()方法比较的是两个String对象的内容是否一样。
回复 使用道具 举报
补充一点  Object的equals方法比较的内存地址  ,只是很多我们常用的类都重写了Object的equals方法改为比较内容。如果你不重写Object的equals方法的话,直接用的话比较的还是地址值。
回复 使用道具 举报
刘笑 中级黑马 2012-6-12 19:33:46
8#
杨天皓 发表于 2012-6-12 16:10
总结的不错

:handshake
回复 使用道具 举报
刘笑 中级黑马 2012-6-12 19:34:14
9#
黄克帅 发表于 2012-6-12 19:07
补充一点  Object的equals方法比较的内存地址  ,只是很多我们常用的类都重写了Object的equals方法改为比较 ...

3Q!!!
回复 使用道具 举报
余银桂 发表于 2012-6-12 18:54
同意楼上的, 是“==”和 equals 标题2个都错了...

去掉这2个错误,内容总结的还不错。 ...

额,文章里有对的地方,有错的地方,见笑了。不过已经更正了
回复 使用道具 举报
李鑫 发表于 2012-6-12 18:42
不是“=”而是“==”

额,真细心,适合本行业!哈
回复 使用道具 举报
刘笑 发表于 2012-6-12 19:35
额,真细心,适合本行业!哈

你这是夸我呢,夸我呢,还是夸我呢!:)
回复 使用道具 举报
李鑫 发表于 2012-6-12 19:42
你这是夸我呢,夸我呢,还是夸我呢!

这是夸你呢,夸你呢,还是夸你呢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马