張元Won的空間
張元Won的空間間
BlogJava
首頁
新隨筆
聯系
聚合
管理
隨筆-15 評論-79 文章-0 trackbacks-0
關于Integer大小比較的問題
昨天跟朋友一起吃飯,他說到兩個Integer類型值比較是否相等的問題。經理也在這里把java的Integer值比較的問題拿出來說一說。因為在面試的時候這個是經常遇到的問題。
首先給大家看一個例子:
1
public
class
Test
{
2
3
/** */
/**
4
* 關于Integer大小比較問題
5
*
@author
經理
6
*/
7
public
static
void
main(String[] args)
{
8
Integer a
=
10
;
9
Integer b
=
10
;
10
System.out.println(
"
a==b :
"
+
String.valueOf(a
==
b));
11
System.out.println(
"
a.equals(b) :
"
+
String.valueOf(a.equals(b)));
12
}
13
}
14
運行一下,在控制臺得到的結果是這樣的
a
==
b :
true
a.equals(b) :
true
當是當我們變換一下值
1
public
class
Test
{
2
3
/** */
/**
4
* 關于Integer大小比較問題
5
*
@author
經理
6
*/
7
public
static
void
main(String[] args)
{
8
Integer a
=
1000
;
9
Integer b
=
1000
;
10
System.out.println(
"
a==b :
"
+
String.valueOf(a
==
b));
11
System.out.println(
"
a.equals(b) :
"
+
String.valueOf(a.equals(b)));
12
}
13
}
運行一下,控制臺的結果又是
a
==
b :
false
a.equals(b) :
true
這是什么原因呢?我當時也有點犯糊涂。有點沖動就直接開源碼看了。
實際上在我們用Integer a = 數字;來賦值的時候Integer這個類是調用的public static Integer valueOf(int i)這個方法。
1
public
static
Integer valueOf(
int
i)
{
2
if
(i
>=
-
128
&&
i
<=
IntegerCache.high)
3
return
IntegerCache.cache[i
+
128
];
4
else
5
return
new
Integer(i);
6
}
我們來看看ValueOf(int i)的代碼,可以發現他對傳入參數i做了一個if判斷。在-128<=i<=127的時候是直接用的int原始數據類型,而超出了這個范圍則是new了一個對象。我們知道"=="符號在比較對象的時候是比較的內存地址,而對于原始數據類型是直接比對的數據值。那么這個問題就解決了。
至于為什么用int型的時候值會在-128<=i<=127范圍呢呢?我們知道八位二進制的表示的范圍正好就是-128到127。大概就是因為這吧。
把平時出現的問題記錄下來,自己就可以一點一點進步了。
posted on 2010-07-24 16:03
張元Won
閱讀(24797)
評論(12)
編輯
收藏
所屬分類:
Java
評論:
#
re: 關于Integer大小比較的問題 2010-07-24 21:22 |
bokix
第一次看到這種問題,自己以后寫代碼要注意了。
不過,“教科書”上教我們,兩個不同對象之間用“==”操作應該是false,因為內存地址不同,如果真這么寫的,那應該問問自己,究竟想比較什么?內存地址還是數值?
回復
更多評論
#
re: 關于Integer大小比較的問題 2010-07-24 22:52 |
え經理え
@bokix
是啊~
推薦多看看源碼,看源碼才能知道問題的根本所在。
回復
更多評論
#
re: 關于Integer大小比較的問題 2010-07-25 11:26 |
rox
恩,這個問題,同事曾經講過,不拿出來單獨說就很容易忘記。
所以,原則上,應該還是用==比基本類型值。
回復
更多評論
#
re: 關于Integer大小比較的問題 2010-07-25 11:39 |
文溫
java Integer比較的妙用
http://www.wenhq.com/article/view_392.html
回復
更多評論
#
re: 關于Integer大小比較的問題[未登錄] 2010-07-25 14:11 |
xxx
要養成好的習慣,不用隨便用==來判斷對象的相等。java不支持操作符重載,所以要用equal來判斷2個對象是否邏輯相等。
回復
更多評論
#
re: 關于Integer大小比較的問題[未登錄] 2010-07-25 14:12 |
xxx
java不是純OO語言?;绢愋湍J不是對象,因此對于基本類型要用==來判斷。
回復
更多評論
#
re: 關于Integer大小比較的問題 2010-07-26 14:28 |
蒂亞戈——侯賽因
博主你是用什么方法怎么“直接開源碼看” 看到這些的?
public static Integer valueOf(int i) {
2 if(i >= -128 && i <= IntegerCache.high)
3 return IntegerCache.cache[i + 128];
4 else
5 return new Integer(i);
6 }
回復
更多評論
#
re: 關于Integer大小比較的問題 2010-07-27 16:20 |
え經理え
@蒂亞戈——侯賽因
你裝個jad就可以看到了~ 多看看源碼!
回復
更多評論
#
re: 關于Integer大小比較的問題 2010-07-27 16:22 |
え經理え
對象還是用eqauls()比較穩妥,eqauls前要判斷是否為空@rox
回復
更多評論
#
re: 關于Integer大小比較的問題 2010-07-27 16:29 |
え經理え
說的很對啊,要養成好習慣,對象比較內容要用equals @xxx
回復
更多評論
#
re: 關于Integer大小比較的問題 2011-02-12 16:19 |
風清月明
細節處見真功夫!!!贊。
回復
更多評論
#
re: 關于Integer大小比較的問題
2013-12-04 16:17 |
武漢-后來者-存在感
究其原因, 應該是java對小整形對象的優化, 打個比方: 程序中有1億個-128-127之間的integer, 如果按照正常我們的OO, 每個都是個對象的話, 就有1億個integer, 可以java來說, 就是引用了. 這樣大大減少對象的數量.
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
JAVA攔截器原理及Struts2擴展
關于Integer大小比較的問題
JAVA讀取配置文件
歡迎BI、數據挖掘愛好者共同學習進步
<
2010年7月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(2)
給我留言
查看公開留言
查看私人留言
隨筆分類
Cognos(4)
Database(2)
Flex(2)
Java(3)
Myeclipse(3)
隨筆檔案
2011年6月 (1)
2011年5月 (1)
2010年11月 (1)
2010年9月 (2)
2010年8月 (3)
2010年7月 (4)
2010年5月 (2)
搜索
最新評論
1.?re: Myeclipse配置插件
我寫的和你的一模一樣就是不可以,可以教我一下嗎?302933397這是我的QQ
--羅永樟
2.?re: JAVA攔截器原理及Struts2擴展
評論內容較長,點擊標題查看
--打破沙鍋問到底
3.?re: Cognos SDK 研究學習手冊(二)之[java讀取report報表返回XML][未登錄]
@匿名
補充
ParmValueItem[] p1 = new ParmValueItem[1];
p1[0] = item1;
--匿名
4.?re: Cognos SDK 研究學習手冊(二)之[java讀取report報表返回XML][未登錄]
第5項中 int index=0 應該放在循環外面 還有參數名稱要和cognos報表中的參數名稱對應 帶參報表終于解析出來了 。
--匿名
5.?re: Cognos SDK 研究學習手冊(二)之[java讀取report報表返回XML]
請問一下如果報表的列項是合并的單元格,xml里面是否會展示出來?
--黑蝙蝠
閱讀排行榜
1.?Myeclipse配置插件(32524)
2.?Myeclipse 8.5 配置SVN(31307)
3.?關于Integer大小比較的問題(24797)
4.?MyEclipse8.5優化(18461)
5.?Cognos SDK 研究學習手冊(二)之[java讀取report報表返回XML](6215)
評論排行榜
1.?Cognos SDK 研究學習手冊(二)之[java讀取report報表返回XML](16)
2.?Myeclipse 8.5 配置SVN(13)
3.?Myeclipse配置插件(13)
4.?關于Integer大小比較的問題(12)
5.?Cognos SDK 研究學習手冊(一)(8)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 張元Won
主站蜘蛛池模板:
亚洲男人电影天堂
|
亚洲AV色香蕉一区二区
|
亚洲av永久中文无码精品综合
|
日本亚洲视频在线
|
国产99视频精品免费视频76
|
亚洲综合激情另类专区
|
香蕉免费一级视频在线观看
|
亚洲春色在线视频
|
91禁漫免费进入
|
亚洲免费闲人蜜桃
|
日韩免费视频播播
|
EEUSS影院WWW在线观看免费
|
亚洲自偷自偷偷色无码中文
|
日韩免费在线视频
|
亚洲一区二区三区久久
|
国产一级淫片视频免费看
|
亚欧洲精品在线视频免费观看
|
亚洲剧情在线观看
|
免费观看男人免费桶女人视频
|
在线观看亚洲专区
|
中文字幕精品亚洲无线码一区应用
|
水蜜桃视频在线观看免费播放高清
|
一区二区三区亚洲
|
免费看少妇作爱视频
|
9久久免费国产精品特黄
|
亚洲欧洲日产v特级毛片
|
在线观看成人免费
|
永久免费观看黄网站
|
亚洲第一区视频在线观看
|
香蕉高清免费永久在线视频
|
香蕉免费在线视频
|
亚洲久悠悠色悠在线播放
|
亚洲综合另类小说色区色噜噜
|
4399影视免费观看高清直播
|
亚洲AV女人18毛片水真多
|
亚洲AV永久纯肉无码精品动漫
|
a级毛片无码免费真人
|
国产特黄特色的大片观看免费视频
|
亚洲不卡1卡2卡三卡2021麻豆
|
亚洲国产成人乱码精品女人久久久不卡
|
人妻无码中文字幕免费视频蜜桃
|