Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java SE 综合讨论区  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 Re:求助,这段程序是怎么回事? [Re:huahua325]
winterlord





发贴: 7
积分: 0
于 2005-08-16 11:39 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
轉一段,也許會對你有幫助:

再來看一個,先看看程式,您以為結果是如何?

Integer i1 = 100;
Integer i2 = 100;

if (i1 == i2)
System.out.println("i1 == i2");
else
System.out.println("i1 != i2");



以自動裝箱與拆箱的機制來看,我想您會覺得結果是顯示"i1 == i2",您是對的!那麼下面這個您覺得結果是什麼?

Integer i1 = 200;
Integer i2 = 200;

if (i1 == i2)
System.out.println("i1 == i2");
else
System.out.println("i1 != i2");



結果是顯示"i1 != i2",這有些令人訝異,語法完全一樣,只不過改個數值而已,結果卻相反。

其實這與'=='運算子的比較有關,'=='可用來比較兩個基本型態的變數值是否相等,事實上'=='也用於判斷兩個物件變數名稱是否參考至同一個物件。

所以'=='可以比較兩個基本型態的變數值是否相等,也可以判斷兩個物件變數的參考物件是否相同,當您如前兩個程式的方式撰寫時,編譯器不知道您實際上要比較的是哪一種?所以對於值從-128到127之間的值,它們被裝箱為Integer物件後,會存在記憶體之中被重用,所以當值在100,使用'=='進行比較時,i1 與 i2實際上參考至同一個物件。

如果超過了從-128到127之間的值,被裝箱後的Integer物件並不會被重用,即相當於每次都新建一個Integer物件,所以當值在 200,使用'=='進行比較時,i1與i2參考的是不同的物件。

所以不要過份依賴自動裝箱與拆箱,您還是必須知道基本型態與物件的差異,上面的程式最好還是依正規的方式來寫,而不是依賴編譯蜜糖(Compiler sugar),例如當值為200時,必須改寫為以下才是正確的。

Integer i1 = 200;
Integer i2 = 200;

if (i1.equals(i2))
System.out.println("i1 == i2");
else
System.out.println("i1 != i2");



結果這次是顯示"i1 == i2"了,使用這樣的寫法,相信您也會比較放心一些,總之一個原則:如果您不確定就不要用。




话题树型展开
人气 标题 作者 字数 发贴时间
13062 求助,这段程序是怎么回事?(== & equals) huahua325 297 2005-08-16 09:49
11105 Re:求助,这段程序是怎么回事? ww1ww1 313 2005-08-16 10:42
11167 Re:求助,这段程序是怎么回事? Vilian_Wei 147 2005-08-20 15:25
11247 Re:求助,这段程序是怎么回事? brianlove 85 2005-08-21 23:53
11079 Re:求助,这段程序是怎么回事? Vilian_Wei 156 2005-08-22 16:11
10965 Re:求助,这段程序是怎么回事?(== & equals) zzw109433 356 2005-08-23 14:51
10869 Re:求助,这段程序是怎么回事?(== & equals) ww1ww1 190 2005-08-23 14:54
10923 Re:求助,这段程序是怎么回事?(== & equals) jigsaw 27 2005-08-23 14:56
11274 Re:求助,这段程序是怎么回事? winterlord 1149 2005-08-16 11:39
11125 Re:求助,这段程序是怎么回事? whyuaou 1265 2005-08-18 14:14
11168 Re:求助,这段程序是怎么回事? whyuaou 502 2005-08-16 12:25
11370 Re:求助,这段程序是怎么回事? huahua325 162 2005-08-16 16:22
10947 Re:求助,这段程序是怎么回事? truthawp 109 2005-08-16 16:28
11729 Re:求助,这段程序是怎么回事? huahua325 76 2005-08-16 17:32
11511 Re:求助,这段程序是怎么回事? acl2005 101 2005-08-16 22:39
10981 Re:求助,这段程序是怎么回事? JavaBeginnerPan 81 2005-08-17 17:23
11384 Re:求助,这段程序是怎么回事? acl2005 22 2005-08-17 22:20
11454 Re:求助,这段程序是怎么回事? acl2005 75 2005-08-18 22:22

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923