Java學習中,所遇到的一些問題及解決方案__Java

來源:互聯網
上載者:User

1、在使用BigDecimal資料類型做除法運算的時候,彈出如下異常:

public static void main(String[] args){        BigDecimal a = new BigDecimal(1000);        BigDecimal b = new BigDecimal(1500);        System.out.println(a.divide(b));}Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.    at java.math.BigDecimal.divide(BigDecimal.java:1690)    at test.Test.main(Test.java:16)

問題出現的原因是:
a和b相除的結果不能使用一個有限的decimal數表示。
所以為瞭解決這個問題,我們應該給結果設定一個範圍。代碼如下

public static void main(String[] args){        BigDecimal a = new BigDecimal(1000);        BigDecimal b = new BigDecimal(1500);        System.out.println(a.divide(b, 2, BigDecimal.ROUND_HALF_UP));}

這個問題,我在網上也找過一些答案,如,有一個說給divide方法設定一個小數點精度,a.divide(b, 2),就那上面代碼的值做輸入,得到的結果卻是1,很明顯這不一定是我們想要的答案。

2 在使用bytebuffer時,如果你想讀取buffer中的byte,可以調用buffer.readByte()或buffer.readBytes(length)。buffer.readByte() 直接返回一個位元組的資料,buffer.readBytes(length) 返回length個位元組的資料。在這裡,如果你需要的是一個array型的資料,你可以直接使用buffer.readBytes(length).array() 。當你僅僅需要一個位元組的資料時,length設定為1即可。

3 在今天碼代碼的過程中,被指出有些代碼有些冗餘。

public void test(){    String hexAltposi = "e8";    ChannelBuffer posi = ChannelBuffer.copiedBuffer(StrUtil.hexStringToBytes(hexAltposi));    //hexStringToBytes()是把hexAltposi由16進位字串轉換成位元組    //希望從buffer中取出數,並轉化成int,先寫出之前的代碼    System.out.println(Util.asInt(StrUtil.bytesToHexString(posi.readBytes(1).array())));    //再碼出現在的代碼    System.out.prinlen((int) posi.readUnsignedByte());}

出現這種情況的原因,是因為自己對Buffer API的認識不足。
我在這裡再列出幾個API的小技巧吧。
①buffer.readableBytes() 不會使buffer的讀取索引值增加或減少
②buffer.skipBytes(length) 會直接使buffer的讀取索引值增加length。當你的buffer中含有一些你用不知道 欄位或者在buffer的末尾有一些不用的欄位,可以直接使用此方法跳過。
③有時(int) buffer.readByte() 時讀取的資料會變成負的值,這裡需要使用(int) buffer.readUnsignedByte() 。

4 對於Integer var = 。 在-128至127範圍內的賦值,Integer對象是在IntegerCache.cache產生,會複用已有對象,這個區間內的Integer值可以直接使用==進行判斷,但是這個區間之外的所有資料,都會在堆上產生,並不會複用已有對象,這是一個大坑,推薦適應equals方法進行判斷。(這一段引用的是阿里巴巴java開發手冊中的話)

此部落格持續更新中……

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.