本帖最后由 沉默de羔羊 于 2013-3-12 17:18 编辑
这个问题,我只有给你举个例子来说明,这是我参加活动的一道题:
下面是我的作答,你看完了基本上对“== ” 和“equals"有一定的理解。
题目:Integer a = new Integer(100);Integer b = 100;Integer c =100;int d = 100; a、b、c、d这四个数通过“==”和equals方法,进行比较,都哪些结果是true,哪些是false.
需要明确的是:
“==”比较的是对象的地址。
“equals”比较的是对象的内容。
解题:
int是基本数据类型,默认值是0
Integer是int的封装数据类型(引用类型),默认值是null。
jdk1.5以上的版本中,基本类型和封装类能自动转化。
"=="比较
System.out.println(a==b); false,虽然是相同的数据类型,但是它们是两个对象,地址不同。
System.out.println(a==c); false,同上
System.out.println(a==d); false,它们是不同的数据类型(jdk1.5以上版本中为true,基本类型和封装类能自动转化)
System.out.println(b==c); true,100数值在常量池中,b和c都指向100,所以相同
System.out.println(b==d); false,它们是不同的数据类型(在jdk1.5以上版本中为true)
System.out.println(c==d); false,它们是不同的数据类型(在jdk1.5以上版本中为true)
"equals"比较,
注意:A.equals(B),因为equals比较的是两个对象,所以A,B都不能为基本数据类型,否则会出编译错误。)(jdk1.5以上版本中,B可以为基本数据类型,A不可以)
结果:
在jdk1.5以上的版本中,结果都是true。
在jdk1.5以下的版本中,比较的是对象两个变量指向的是对象的都为true,但是出现基本数据类型,就没办法通过,会报错。 |