日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

[改善Java代码]优先使用整型池

發布時間:2025/6/15 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [改善Java代码]优先使用整型池 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

建議28: 優先使用整型池

看如下代碼:

1 public class Client { 2 public static void main(String[] args) { 3 Scanner input = new Scanner(System.in); 4 while (input.hasNextInt()) { 5 int ii = input.nextInt(); 6 System.out.println("\n====" + ii + " 的相等判斷======"); 7 // 兩個通過new產生的Integer對象 8 Integer i = new Integer(ii); 9 Integer j = new Integer(ii); 10 System.out.println("new產生的對象:" + (i == j)); 11 12 // 基本類型轉為包裝類型后比較 13 i = ii; 14 j = ii; 15 System.out.println("基本類型轉換的對象:" + (i == j)); 16 17 // 通過靜態方法生成一個實例 18 i = Integer.valueOf(ii); 19 j = Integer.valueOf(ii); 20 System.out.println("valueOf產生的對象:" + (i == j)); 21 } 22 } 23 }

輸入多個數字,然后按照3種不同的方式產生Integer對象,判斷其是否相等,注意這里使用了“==”,這說明判斷的不是同一個對象。我們輸入三個數字127、128、555,結果如下:

====127 的相等判斷====== new產生的對象:false 基本類型轉換的對象:true valueOf產生的對象:true ====128 的相等判斷====== new產生的對象:false 基本類型轉換的對象:false valueOf產生的對象:false ====555 的相等判斷====== new產生的對象:false 基本類型轉換的對象:false valueOf產生的對象:false

很不可思議呀,數字127的比較結果竟然與其他兩個數字不同,它的裝箱動作所產生的對象竟然是同一個對象,valueOf產生的也是同一個對象,但是大于127的數字128和555在比較過程中所產生的卻不是同一個對象,這是為什么?我們一個一個來解釋。

(1)new產生的Integer對象

new聲明的就是要生成一個新的對象,沒二話,這是兩個對象,地址肯定不等,比較結果為false。

(2)裝箱生成的對象

對于這一點,首先要說明的是裝箱動作是通過valueOf方法實現的,也就是說后兩個算法是相同的,那結果肯定也是一樣的,現在的問題是:valueOf是如何生成對象的呢?我們來閱讀一下Integer.valueOf的實現代碼:

1 public static Integer valueOf(int i) { 這段代碼的意思已經很明了了,如果是-128到127之間的int類型轉換為Integer對象,則直接從cache數組中獲得,那cache數組里是什么東西,代碼如下: 2 final int offset = 128; 3 if (i >= -128 && i <= 127) { // must cache 4 return IntegerCache.cache[i + offset]; 5 } 6 return new Integer(i); 7 }

這段代碼的意思已經很明了了,如果是-128到127之間的int類型轉換為Integer對象,則直接從cache數組中獲得,那cache數組里是什么東西,代碼如下:

1 static final Integer cache[] = new Integer[-(-128) + 127 + 1]; 2 3 static { 4 for(int i = 0; i < cache.length; i++) 5 cache[i] = new Integer(i - 128); 6 }

cache是IntegerCache內部類的一個靜態數組,容納的是﹣128到127之間的Integer對象。通過valueOf產生包裝對象時,如果int參數在﹣128和127之間,則直接從整型池中獲得對象,不在該范圍的int類型則通過new生成包裝對象。

明白了這一點,要理解上面的輸出結果就迎刃而解了,127的包裝對象是直接從整型池中獲得的,不管你輸入多少次127這個數字,獲得的對象都是同一個,那地址當然都是相等的。而128、555超出了整型池范圍,是通過new產生一個新的對象,地址不同,當然也就不相等了。

以上的解釋也是整型池的原理,整型池的存在不僅僅提高了系統性能,同時也節約了內存空間,這也是我們使用整型池的原因,也就是在聲明包裝對象的時候使用valueOf生成,而不是通過構造函數來生成的原因。順便提醒大家,在判斷對象是否相等的時候,最好是用equals方法,避免用“==”產生非預期結果。

注意 通過包裝類的valueOf生成包裝實例可以顯著提高空間和時間性能。

?

轉載于:https://www.cnblogs.com/DreamDrive/p/5425090.html

總結

以上是生活随笔為你收集整理的[改善Java代码]优先使用整型池的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 五月av| 久久久久久久久久影院 | 污污视频在线免费观看 | brazzers猛女系列 | 国精产品一二三区精华液 | 美日韩三级 | 素人av在线 | 在线观看日本 | 亚洲a毛片| 黄色网战大全 | 亚洲激情国产 | 国产特黄级aaaaa片免 | 麻豆精品网站 | 视频在线观看电影完整版高清免费 | 91天堂在线| 国产高清一区在线观看 | 亚洲欧美亚洲 | 欧美极品一区 | 久草影视在线观看 | av女人的天堂 | 亚洲精品一线二线三线 | 精品3p | 男人插女人视频网站 | 日韩视频在线观看 | 亚洲天堂av片 | 精品国产午夜福利在线观看 | av在线播放不卡 | 午夜激情在线观看视频 | 18视频在线观看娇喘 | 国产一区二区亚洲 | 一级黄色在线视频 | 亚洲AV无码国产精品国产剧情 | 91麻豆影院| 亚洲免费在线 | 四虎影视永久免费观看 | 非洲黑人毛片 | 黄色污在线观看 | 亚洲视频自拍偷拍 | 三级精品在线 | 欧美日韩国产麻豆 | 日韩avv| 特大黑人巨交吊性xx | 成人免费在线 | 免费网站在线观看视频 | 原创露脸88av| 国内外成人在线视频 | 久久久久久国产视频 | 青青超碰 | 国产精品美女久久久久久 | 91直接进入 | 日本一本久草 | 亚洲性图一区二区三区 | 蜜臀aⅴ国产精品久久久国产老师 | 天天操穴 | 国产精品偷乱一区二区三区 | 婷婷看片 | 九色tv | 天堂va蜜桃一区 | 亚洲女优一区 | 午夜资源站 | 久久午夜神器 | 久久一区视频 | 天堂在线官网 | 国产绳艺sm调教室论坛 | 超碰77| www.亚洲综合 | 91中出| 99国产精品久久久久久久成人 | 精品无码一区二区三区蜜臀 | 99久久夜色精品国产亚洲 | 美国少妇性做爰 | 九九九在线视频 | 中国二级毛片 | 日韩激情视频 | 日韩在线天堂 | 久久全国免费视频 | 国产精品4p| 亚洲一级在线 | 丁香综合 | 亚洲码国产精品高潮在线 | 国产精品久久久久久久久晋中 | 亚洲理论在线 | 国产人妻精品一区二区三 | 误杀1电影免费观看高清完整版 | 亚洲美女在线视频 | 天天干夜夜嗨 | 亚洲一区日本 | 婷婷色在线观看 | 东京av男人的天堂 | 好吊视频一区二区三区 | wwww黄色片 | 日本公妇乱淫免费视频一区三区 | 久久99精品国产麻豆婷婷洗澡 | 色妞色| 黄色网址在线看 | 歪歪视频在线观看 | 日韩人妻精品中文字幕 | 老女人一区 | 毛片免费全部无码播放 |