日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Java程序員易踩的坑及解析

來源: 責編: 時間:2024-03-18 09:42:57 226觀看
導讀作為Java程序員,在日常開發中經常會遇到一些低級錯誤或者難以理解的情況。以下2個常見的問題,涉及到Java的基礎知識,這2個基礎知識小坑90%以上的程序員都踩過1. ==號比較的坑在比較Integer類型的對象時,一些程序員小伙伴

作為Java程序員,在日常開發中經常會遇到一些低級錯誤或者難以理解的情況。以下2個常見的問題,涉及到Java的基礎知識,這2個基礎知識小坑90%以上的程序員都踩過set28資訊網——每日最新資訊28at.com

1. ==號比較的坑

在比較Integer類型的對象時,一些程序員小伙伴可能會使用==來判斷它們是否相等。然而,這種用法并不總是正確的。例如,對于Integer對象,==比較的是對象的引用而非值,因此結果可能出乎意料。我們應該養成使用equals()方法來判斷兩個Integer對象是否相等的良好習慣set28資訊網——每日最新資訊28at.com

Integer status1 = new Integer(1);Integer status2 = new Integer(1);System.out.println(status1 == status2);

思考:返回結果是什么?set28資訊網——每日最新資訊28at.com

答案:falseset28資訊網——每日最新資訊28at.com

我們小伙伴會說了,Java不是中為了節省內存和提高性能,會對一定范圍內的Integer對象進行緩存。范圍默認是在 -128 到 127 之間,怎么沒有生效?set28資訊網——每日最新資訊28at.com

我們來看一下Integer構造方法set28資訊網——每日最新資訊28at.com

public Integer(int value) {    this.value = value;}

發現在Integer構造方法中并沒有使用緩存set28資訊網——每日最新資訊28at.com

思考:Integer緩存在哪里使用?set28資訊網——每日最新資訊28at.com

在Integer類的valueOf方法中set28資訊網——每日最新資訊28at.com

public static Integer valueOf(int i) {    if (i >= IntegerCache.low && i <= IntegerCache.high)        return IntegerCache.cache[i + (-IntegerCache.low)];    return new Integer(i);}

如果將代碼修改為如下:set28資訊網——每日最新資訊28at.com

Integer status1 = 1;  Integer status2 = 1;  System.out.println(status1 == status2);

思考:返回結果是什么?set28資訊網——每日最新資訊28at.com

答案:trueset28資訊網——每日最新資訊28at.com

特別說明: Integer status1 = 1 會默認轉換為Integer status1 = Integer.valueOf(1)set28資訊網——每日最新資訊28at.com

編碼要養成良好習慣,盡量少用==判斷兩個Integer類型數據是否相等,而應該改成使用equals方法判斷:set28資訊網——每日最新資訊28at.com

Integer status1 = new Integer(1);Integer status2 = new Integer(1);System.out.println(status1.equals(status2));

輸出結果trueset28資訊網——每日最新資訊28at.com

2. BigDecimal的坑

在一些業務場景(比如:倉庫數量,金額)需要設置成小數,此時字段類型應該定義成BigDecimal,而不是Double,避免丟失精度問題set28資訊網——每日最新資訊28at.com

Double amount1 = 0.02;  Double amount2 = 0.03;  System.out.println(amount2 - amount1);

思考:輸出結果會是0.1?set28資訊網——每日最新資訊28at.com

答案:不是輸出結果如下:set28資訊網——每日最新資訊28at.com

0.009999999999999998

原因如下:Double類型的兩個參數相減會轉換成二進制,Double有效位數為16位這就會出現存儲小數位數不夠的情況,這種情況下就會出現誤差set28資訊網——每日最新資訊28at.com

將上面代碼進行優化set28資訊網——每日最新資訊28at.com

BigDecimal amount1 = new BigDecimal(0.02);BigDecimal amount2 = new BigDecimal(0.03);System.out.println(amount2.subtract(amount1));

思考:結果會是0.1?不是的,輸出結果如下:set28資訊網——每日最新資訊28at.com

0.0099999999999999984734433411404097569175064563751220703125

思考:BigDecimal為啥還是丟失精度?set28資訊網——每日最新資訊28at.com

查看BigDecimal構造方法,注釋說明如下set28資訊網——每日最新資訊28at.com

/** * 將 a double 轉換為 a BigDecimal ,它是 的二進制浮點值的精確十進制表示 double形式。返回 BigDecimal 的小數位數是最小值,因此 (10scale × val) 是整數。 * 筆記: * 此構造函數的結果可能有些不可預測。人們可能會假設用 Java 編寫 new BigDecimal(0.1) 會創建一個 BigDecimal 完全等于 0.1(未縮放值為 1,小數位數為 1),但實際上它等于 0.1000000000000000000055511151231257827021181583404541015625。這是因為 0.1 不能完全表示為 a double (或者,就此而言,不能表示為任何有限長度的二進制分數)。因此,傳遞 給 構造函數的值并不完全等于 0.1,盡管外觀如此。 * String另一方面,構造函數是完全可預測的:正如人們所期望的那樣,寫入new BigDecimal("0.1")會創建一個BigDecimal完全等于 0.1 的構造函數。因此,通常建議優先使用 String 構造函數而不是此構造函數。 * 當 必須將 a double 用作 的源BigDecimal時,請注意,此構造函數提供精確的轉換;它不會給出與使用Double.toString(double)方法然后使用BigDecimal(String)構造函數將 轉換為 double a String 相同的結果。若要獲得該結果,請使用該staticvalueOf(double)方法。 * 參數: * val – double 要轉換為 BigDecimal的值。 * 拋出: * NumberFormatException – 如果 val 是無限或 NaN。         */public BigDecimal(double val) {    this(val,MathContext.UNLIMITED);}

通過構造函數說明發現,使用BigDecimal構造函數初始化對象,也會丟失精度set28資訊網——每日最新資訊28at.com

思考:BigDecimal如何才能不丟失精度呢?set28資訊網——每日最新資訊28at.com

BigDecimal amount3 = new BigDecimal(String.valueOf(0.02));  BigDecimal amount4 = new BigDecimal(String.valueOf(0.03));  System.out.println(amount4.subtract(amount3));

使用BigDecimal.valueOf方法初始化BigDecimal類型參數,也能保證精度不丟失。在新版的阿里巴巴開發手冊中,也推薦使用這種方式創建BigDecimal參數。set28資訊網——每日最新資訊28at.com

BigDecimal amount1 =  BigDecimal.valueOf(0.02);  BigDecimal amount2 =   BigDecimal.valueOf(0.03);  System.out.println(amount2.subtract(amount1));

本文鏈接:http://m.www897cc.com/showinfo-26-76569-0.htmlJava程序員易踩的坑及解析

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Redis鎖被別人釋放怎么辦

下一篇: 智能座艙軟件性能與可靠性的評估和改進

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
av成人国产| 亚洲福利视频一区| 欧美日韩日日骚| 国产精品久99| 国内精品久久久| 亚洲精品一区二区三区樱花| 亚洲一区不卡| 久久久久久久久久久一区| 欧美成人午夜激情在线| 欧美日韩三级| 国产午夜精品在线| 亚洲全部视频| 午夜精品久久久久久久99樱桃| 久久久久久黄| 欧美日韩亚洲综合| 国产一区二区中文字幕免费看| 在线欧美视频| 亚洲自拍电影| 麻豆国产va免费精品高清在线| 欧美日韩精品一区视频| 韩国女主播一区| 亚洲色图制服丝袜| 免费观看国产成人| 国产精品美女在线| 亚洲激情第一区| 午夜精品久久久99热福利| 欧美不卡激情三级在线观看| 国产精品影视天天线| 亚洲人久久久| 久久精品首页| 国产精品成人免费| 91久久中文字幕| 欧美在线黄色| 欧美日韩在线观看视频| 伊人激情综合| 欧美一区二区三区四区在线 | 亚洲人成77777在线观看网| 午夜精品免费在线| 欧美日韩精品免费在线观看视频| 狠狠久久五月精品中文字幕| 亚洲午夜精品久久久久久浪潮| 美女成人午夜| 国产区精品视频| 亚洲视频久久| 欧美精品一区二区久久婷婷| 在线播放精品| 久久精品一区二区国产| 国产精品免费一区豆花| 亚洲伦理在线观看| 免费在线观看日韩欧美| 国产尤物精品| 性欧美xxxx视频在线观看| 欧美午夜不卡在线观看免费| 亚洲久色影视| 欧美成人午夜激情| 亚洲国产成人不卡| 久久久久在线观看| 国产色综合久久| 午夜精品久久99蜜桃的功能介绍| 欧美日韩一区二区视频在线观看| 亚洲激情视频| 美女诱惑一区| 亚洲大片av| 久热综合在线亚洲精品| 精品1区2区3区4区| 久久久久久久尹人综合网亚洲| 国产一区二区三区黄| 欧美一区二区在线看| 国产精品日韩| 香蕉av777xxx色综合一区| 国产精品极品美女粉嫩高清在线 | 欧美在线在线| 国产视频精品xxxx| 欧美一区二区三区四区高清| 国产精品美女主播| 亚洲综合国产| 国产精品亚洲综合一区在线观看| 亚洲综合色婷婷| 国产精品手机在线| 香蕉久久a毛片| 国产日韩一级二级三级| 久久久91精品| 尤物99国产成人精品视频| 麻豆九一精品爱看视频在线观看免费| 精品av久久久久电影| 麻豆91精品| 亚洲精品视频在线观看免费| 欧美区国产区| 亚洲天堂免费观看| 国产精品丝袜91| 久久精品一区二区三区四区 | 久久国产精品亚洲77777| 狠狠v欧美v日韩v亚洲ⅴ| 另类天堂视频在线观看| 亚洲国产精品va| 欧美精品色网| 亚洲小说欧美另类婷婷| 国产伦精品一区| 久久久精品性| 亚洲第一毛片| 欧美日韩成人综合| 亚洲男女自偷自拍| 国产一区二区中文字幕免费看| 久久漫画官网| 91久久线看在观草草青青| 欧美日韩国产综合网| 亚洲欧美国产三级| 国外成人在线视频| 欧美福利影院| 亚洲一二三区精品| 国产美女精品免费电影| 久久婷婷影院| 99国产精品国产精品久久| 国产精品青草综合久久久久99| 久久er精品视频| 91久久线看在观草草青青| 国产精品久久久久久久久久免费| 欧美伊人久久久久久久久影院| 樱桃国产成人精品视频| 欧美日韩国产999| 欧美亚洲综合网| 亚洲国产三级网| 国产精品免费视频xxxx| 久久在线免费| 亚洲私人黄色宅男| 激情综合电影网| 国产精品v日韩精品v欧美精品网站| 欧美专区第一页| 亚洲人永久免费| 国产欧美精品一区二区色综合| 男人的天堂亚洲在线| 亚洲欧美国产va在线影院| 亚洲第一天堂av| 国产精品老牛| 欧美ab在线视频| 亚洲综合成人在线| 亚洲激情网站免费观看| 国产精品免费观看视频| 欧美国产三级| 欧美在线观看视频| 99www免费人成精品| 国产在线精品一区二区中文| 欧美日韩在线高清| 快播亚洲色图| 先锋影音久久| 99在线|亚洲一区二区| 国内精品伊人久久久久av一坑| 欧美午夜精品久久久久久孕妇 | 欧美国产高潮xxxx1819| 欧美一区2区三区4区公司二百| 亚洲精品乱码久久久久久日本蜜臀| 国产日韩欧美在线看| 欧美日韩国产小视频在线观看| 久久免费的精品国产v∧| 亚洲欧美一区二区原创| 日韩亚洲不卡在线| 激情久久五月天| 国产精品每日更新| 欧美日韩国产欧| 欧美sm视频| 久久久久久久久久码影片| 亚洲欧美日韩精品久久久久| 亚洲美女精品成人在线视频| 激情自拍一区| 国产日韩欧美高清| 国产精品九九久久久久久久| 欧美精品免费播放| 蜜臀av性久久久久蜜臀aⅴ四虎| 午夜精品短视频| 在线亚洲一区二区| 亚洲精品一区二区三区av| 在线精品观看| 韩日在线一区| 国产亚洲观看| 国产女主播一区二区| 国产精品成人在线观看| 欧美日韩麻豆| 欧美国产精品久久| 巨乳诱惑日韩免费av| 久久精品首页| 久久精品成人一区二区三区蜜臀| 午夜伦理片一区| 亚洲欧美激情四射在线日| 亚洲视频www| 在线亚洲欧美专区二区| 亚洲毛片视频| 亚洲精品久久久久中文字幕欢迎你| 一区二区视频欧美| 韩国av一区二区三区| 韩国一区二区三区在线观看| 国产午夜精品在线| 国产亚洲成精品久久| 国产午夜精品理论片a级大结局| 国产精品资源在线观看| 国产精品网站在线观看| 国产精品伦一区| 国产精品久久久久久亚洲毛片| 欧美深夜影院| 国产精品国产自产拍高清av| 国产精品久久久久久久久免费桃花| 国产精品福利影院| 国产精品三级视频| 国产乱码精品1区2区3区| 国产嫩草影院久久久久|