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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 来明坤 中级黑马   /  2012-7-4 15:50  /  3235 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 来明坤 于 2012-7-4 16:26 编辑

小马求教

点评

你这个应该加不了分,都已经被别人问烂了,真的被问烂掉了!  发表于 2012-7-4 18:15
楼主应该先看一下论坛以前的帖子,或者百度谷歌,不明白才来提问。这个问题,问得太泛滥了。  发表于 2012-7-4 16:15

7 个回复

倒序浏览
本网站有关这个问题的帖子至少有十个,楼主可以看看前人是怎么回答的
回复 使用道具 举报
这个问题已经被问烂了,,百度和论坛上一搜一把,,楼主搜一下吧
回复 使用道具 举报
这个题都快被问烂了,度娘那里能找到你想要的答案,
我简答总结一下:
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
==比较的是2个对象的地址,而equals比较的是2个对象的内容
举个例子:
int a1=1;
int a2=1;
Integer b1 =new Integer (1);
Integer b2 =new Integer (1);
------------------------------
a1==a2 这个是成立的,很简单,都知道
a1==b1 这个是不成立的.表达式的值为 false ,它们是不同的数据类型(在jdk1.5以上版本中为true)
b1==b2 这个也是不成立的.表达式的值为 false,虽然是相同的数据类型,但是它们是两个对象,==比较的是2个对象的地址,它们的地址是不相等的,内容相等都是1;
b1.equals(b2)==true 这个是成立的,表达式的值为 true. 相同数据类型,两个对象,地址不同,内容相同, equals比较的是2个对象的内容,所以成立。
(a.equals(b),因为equals比较的是两个对象,所以a,b都不能为基本数据类型,否则会出编译错误。)
总结来说:在JAVA中:==比较的是2个对象的地址,而equals比较的是2个对象的内容

我也是菜鸟,求共同进步。
回复 使用道具 举报
简单的说。。equals比较的是内容。。。
==比较的是值的引用。即内存地址。
String s1=new String("java");s1.equals("java"),返回true
String s2="java"; s1==s2;返回false;

另外,也要区分两种创建对象的方式。

回复 使用道具 举报
真的是看了好多个了  ==比较的内存中的地址值  而equal比较的是内存地址中的内容
回复 使用道具 举报
java中的数据类型,可分为两类:
1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean
  他们之间的比较,应用双等号(==),比较的是他们的值。
2.复合数据类型(类)
  当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
  对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。
回复 使用道具 举报
除了字符串因为帮你复写好了equals,所以比较的是内容,其他地方如果你自己不复写equals,那和==没区别都是比较内存地址
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马