| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1360 人关注过本帖
标题:关于“==”和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
快速回复:关于“==”和equals的问题!
数据加载中...
 
   



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

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