标题:关于“==”和equals的问题!
只看楼主
zsolong
Rank: 1
等 级:新手上路
威 望:1
帖 子:193
专家分:0
注 册:2006-12-15
 问题点数:0 回复次数:15 
关于“==”和equals的问题!

public class EqualTest {

public static void main(String[] args) {

Integer i1 = 1000;
Integer i2 = 1000;
if(i1 == i2)
{System.out.println("Same objects");}
if(i1!=i2)
{System.out.println("Different Objects");}
if(i1.equals(i2))
{System.out.println("meaningfully equal");}

Integer i3 = 10;
Integer i4 = 10;
if(i3 == i4)
{System.out.println("same object");}
if(i3 != i4)
{System.out.println("Different object");}
if(i3.equals(i4))
{System.out.println("meaningfully equal");}

}

}

输出的结果是:
Different Objects
meaningfully equal
same object
meaningfully equal

结果让我感觉不是太理解,为什么上面
Integer i1 = 1000;
Integer i2 = 1000;
而下面
Integer i3 = 10;
Integer i4 = 10;
的结果会不一样呢?
请大家帮忙看看,谢谢!

搜索更多相关主题的帖子: equals 
2007-07-09 10:00
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
-128到127之间的Integer会有一个缓存,所有的都指向一个对象

不在这个范围之内的就不会了

你看看Integer的源码就知道了

可惜不是你,陪我到最后
2007-07-09 10:22
lov
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2006-12-23
得分:0 
==和equals确实不太一样!!具体区别也不是很清楚!!
2007-07-09 11:12
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
得分:0 
老千说太深奥了。。。

不过没有他的也解释不了。。。

我可以解释的是“==”比较的是对象是否相同,同一个对象才相等。

equals比较的是值,这个对象的属性,可以是对象。TEXT等。。。

人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2007-07-09 11:59
大嘴先生2
Rank: 1
等 级:新手上路
威 望:2
帖 子:815
专家分:0
注 册:2006-4-17
得分:0 
==比较的是地址
equals比较的是字符串内容

骑白马的未必是王子,也可能是唐僧;有翅膀的未必是天使,也可能是鸟人。
2007-07-09 12:08
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
得分:0 
楼上位先生说的是。

人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2007-07-09 14:07
roy_guo
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2006-4-27
得分:0 
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}

彪悍的人生不需要解释~~~
2007-07-09 16:48
zsolong
Rank: 1
等 级:新手上路
威 望:1
帖 子:193
专家分:0
注 册:2006-12-15
得分:0 
原来是由于Integer的缓存导致的,不错,谢谢诸位!

2007-07-10 09:54
zsolong
Rank: 1
等 级:新手上路
威 望:1
帖 子:193
专家分:0
注 册:2006-12-15
得分:0 
接着出一道题,帮大家理解一下这两者的区别:
有下面的代码片断:
Float s=new Float(0.9F)
Float t=new Float(0.9F)
Double u=new Double(0.9)

那么下面哪些表达式的结果是true呢?
A. s==t
B. s.equals(t)
C. s==u
D. t.equals(u)
大家可以试着做一下,呵呵,答案稍后公布。

[此贴子已经被作者于2007-7-10 10:03:11编辑过]


2007-07-10 10:01
witchery
Rank: 1
来 自:西安
等 级:新手上路
帖 子:205
专家分:0
注 册:2005-8-6
得分:0 
5楼说的有点不完善..
equals 是Object中的一个方法,但是此方法在String 类中被重写.
重写后的equals方法用于比较两个字符串的内容是否相同..
2007-07-10 14:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-153906-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.869141 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved