<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java中的 BigDecimal,80%的人都用錯(cuò)了....

          共 3934字,需瀏覽 8分鐘

           ·

          2022-04-17 09:35

          點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)

          一、BigDecimal概述

          Java在java.math包中提供的API類BigDecimal,用來(lái)對(duì)超過(guò)16位有效位的數(shù)進(jìn)行精確的運(yùn)算。雙精度浮點(diǎn)型變量double可以處理16位有效數(shù),但在實(shí)際應(yīng)用中,可能需要對(duì)更大或者更小的數(shù)進(jìn)行運(yùn)算和處理。

          一般情況下,對(duì)于那些不需要準(zhǔn)確計(jì)算精度的數(shù)字,我們可以直接使用Float和Double處理,但是Double.valueOf(String)Float.valueOf(String)會(huì)丟失精度。所以開發(fā)中,如果我們需要精確計(jì)算的結(jié)果,則必須使用BigDecimal類來(lái)操作。

          BigDecimal所創(chuàng)建的是對(duì)象,故我們不能使用傳統(tǒng)的+、-、*、/等算術(shù)運(yùn)算符直接對(duì)其對(duì)象進(jìn)行數(shù)學(xué)運(yùn)算,而必須調(diào)用其相對(duì)應(yīng)的方法。方法中的參數(shù)也必須是BigDecimal的對(duì)象。構(gòu)造器是類的特殊方法,專門用來(lái)創(chuàng)建對(duì)象,特別是帶有參數(shù)的對(duì)象。

          二、BigDecimal常用構(gòu)造函數(shù)

          2.1、常用構(gòu)造函數(shù)

          • BigDecimal(int)

          創(chuàng)建一個(gè)具有參數(shù)所指定整數(shù)值的對(duì)象

          • BigDecimal(double)

          創(chuàng)建一個(gè)具有參數(shù)所指定雙精度值的對(duì)象

          • BigDecimal(long)

          創(chuàng)建一個(gè)具有參數(shù)所指定長(zhǎng)整數(shù)值的對(duì)象

          • BigDecimal(String)

          創(chuàng)建一個(gè)具有參數(shù)所指定以字符串表示的數(shù)值的對(duì)象

          2.2、使用問(wèn)題分析

          使用示例:

          BigDecimal?a?=new?BigDecimal(0.1);??
          System.out.println("a?values?is:"+a);??
          System.out.println("=====================");??
          BigDecimal?b?=new?BigDecimal("0.1");??
          System.out.println("b?values?is:"+b);??

          結(jié)果示例:

          a?values?is:0.1000000000000000055511151231257827021181583404541015625??
          =====================??
          b?values?is:0.1??

          原因分析:

          1)參數(shù)類型為double的構(gòu)造方法的結(jié)果有一定的不可預(yù)知性。有人可能認(rèn)為在Java中寫入newBigDecimal(0.1)所創(chuàng)建的BigDecimal正好等于 0.1(非標(biāo)度值 1,其標(biāo)度為 1),但是它實(shí)際上等于0.1000000000000000055511151231257827021181583404541015625。這是因?yàn)?.1無(wú)法準(zhǔn)確地表示為 double(或者說(shuō)對(duì)于該情況,不能表示為任何有限長(zhǎng)度的二進(jìn)制小數(shù))。這樣,傳入到構(gòu)造方法的值不會(huì)正好等于 0.1(雖然表面上等于該值)。

          2)String 構(gòu)造方法是完全可預(yù)知的:寫入newBigDecimal(“0.1”)將創(chuàng)建一個(gè) BigDecimal,它正好等于預(yù)期的 0.1。因此,比較而言, 通常建議優(yōu)先使用String構(gòu)造方法。

          3)當(dāng)double必須用作BigDecimal的源時(shí),請(qǐng)注意,此構(gòu)造方法提供了一個(gè)準(zhǔn)確轉(zhuǎn)換;它不提供與以下操作相同的結(jié)果:先使用Double.toString(double)方法,然后使用BigDecimal(String)構(gòu)造方法,將double轉(zhuǎn)換為String。要獲取該結(jié)果,請(qǐng)使用static valueOf(double)方法。

          三、BigDecimal常用方法詳解

          3.1、常用方法

          • add(BigDecimal)

          BigDecimal對(duì)象中的值相加,返回BigDecimal對(duì)象

          • subtract(BigDecimal)

          BigDecimal對(duì)象中的值相減,返回BigDecimal對(duì)象

          • multiply(BigDecimal)

          BigDecimal對(duì)象中的值相乘,返回BigDecimal對(duì)象

          • divide(BigDecimal)

          BigDecimal對(duì)象中的值相除,返回BigDecimal對(duì)象

          • toString()

          將BigDecimal對(duì)象中的值轉(zhuǎn)換成字符串

          • doubleValue()

          將BigDecimal對(duì)象中的值轉(zhuǎn)換成雙精度數(shù)

          • floatValue()

          將BigDecimal對(duì)象中的值轉(zhuǎn)換成單精度數(shù)

          • longValue()

          將BigDecimal對(duì)象中的值轉(zhuǎn)換成長(zhǎng)整數(shù)

          • intValue()

          將BigDecimal對(duì)象中的值轉(zhuǎn)換成整數(shù)

          3.2、BigDecimal大小比較

          java中對(duì)BigDecimal比較大小一般用的是bigdemical的compareTo方法

          int?a?=?bigdemical.compareTo(bigdemical2)??

          返回結(jié)果分析:

          a =?-1,表示bigdemical小于bigdemical2;??
          a =?0,表示bigdemical等于bigdemical2;??
          a = 1,表示bigdemical大于bigdemical2;??

          舉例:a大于等于b

          new?bigdemica(a).compareTo(new?bigdemical(b))?>=?0??

          四、BigDecimal格式化

          由于NumberFormat類的format()方法可以使用BigDecimal對(duì)象作為其參數(shù),可以利用BigDecimal對(duì)超出16位有效數(shù)字的貨幣值,百分值,以及一般數(shù)值進(jìn)行格式化控制。

          以利用BigDecimal對(duì)貨幣和百分比格式化為例。首先,創(chuàng)建BigDecimal對(duì)象,進(jìn)行BigDecimal的算術(shù)運(yùn)算后,分別建立對(duì)貨幣和百分比格式化的引用,最后利用BigDecimal對(duì)象作為format()方法的參數(shù),輸出其格式化的貨幣值和百分比。

          NumberFormat?currency?=?NumberFormat.getCurrencyInstance();?//建立貨幣格式化引用???
          NumberFormat?percent?=?NumberFormat.getPercentInstance();??//建立百分比格式化引用???
          percent.setMaximumFractionDigits(3);?//百分比小數(shù)點(diǎn)最多3位???
          ??
          BigDecimal?loanAmount?=?new?BigDecimal("15000.48");?//貸款金額??
          BigDecimal?interestRate?=?new?BigDecimal("0.008");?//利率?????
          BigDecimal?interest?=?loanAmount.multiply(interestRate);?//相乘??
          ??
          System.out.println("貸款金額:\t"?+?currency.format(loanAmount));???
          System.out.println("利率:\t"?+?percent.format(interestRate));???
          System.out.println("利息:\t"?+?currency.format(interest));???

          結(jié)果:

          貸款金額:?¥15,000.48?利率:?0.8%?利息:?¥120.00??

          BigDecimal格式化保留2為小數(shù),不足則補(bǔ)0:

          public?class?NumberFormat?{??
          ??
          ????public?static?void?main(String[]?s){??
          ????????System.out.println(formatToNumber(new?BigDecimal("3.435")));??
          ????????System.out.println(formatToNumber(new?BigDecimal(0)));??
          ????????System.out.println(formatToNumber(new?BigDecimal("0.00")));??
          ????????System.out.println(formatToNumber(new?BigDecimal("0.001")));??
          ????????System.out.println(formatToNumber(new?BigDecimal("0.006")));??
          ????????System.out.println(formatToNumber(new?BigDecimal("0.206")));??
          ????}??
          ????/**??
          ?????*?@desc?1.0~1之間的BigDecimal小數(shù),格式化后失去前面的0,則前面直接加上0。??
          ?????*?2.傳入的參數(shù)等于0,則直接返回字符串"0.00"??
          ?????*?3.大于1的小數(shù),直接格式化返回字符串??
          ?????*?@param?obj傳入的小數(shù)??
          ?????*?@return??
          ?????*/
          ??
          ????public?static?String?formatToNumber(BigDecimal?obj)?{??
          ????????DecimalFormat?df?=?new?DecimalFormat("#.00");??
          ????????if(obj.compareTo(BigDecimal.ZERO)==0)?{??
          ????????????return?"0.00";??
          ????????}else?if(obj.compareTo(BigDecimal.ZERO)>0&&obj.compareTo(new?BigDecimal(1))<0){??
          ????????????return?"0"+df.format(obj).toString();??
          ????????}else?{??
          ????????????return?df.format(obj).toString();??
          ????????}??
          ????}??
          }??

          結(jié)果為:

          3.44??
          0.00??
          0.00??
          0.00??
          0.01??
          0.21??

          五、BigDecimal常見異常

          5.1、除法的時(shí)候出現(xiàn)異常

          java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result

          原因分析:

          通過(guò)BigDecimal的divide方法進(jìn)行除法時(shí)當(dāng)不整除,出現(xiàn)無(wú)限循環(huán)小數(shù)時(shí),就會(huì)拋異常:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

          解決方法:

          divide方法設(shè)置精確的小數(shù)點(diǎn),如:divide(xxxxx,2)

          六、BigDecimal總結(jié)

          6.1、總結(jié)

          在需要精確的小數(shù)計(jì)算時(shí)再使用BigDecimal,BigDecimal的性能比double和float差,在處理龐大,復(fù)雜的運(yùn)算時(shí)尤為明顯。故一般精度的計(jì)算沒必要使用BigDecimal。
          盡量使用參數(shù)類型為String的構(gòu)造函數(shù)。

          BigDecimal都是不可變的(immutable)的, 在進(jìn)行每一次四則運(yùn)算時(shí),都會(huì)產(chǎn)生一個(gè)新的對(duì)象 ,所以在做加減乘除運(yùn)算時(shí)要記得要保存操作后的值。

          6.2、工具類推薦

          package?com.vivo.ars.util;??
          import?java.math.BigDecimal;??
          ??
          /**??
          ?*?用于高精確處理常用的數(shù)學(xué)運(yùn)算??
          ?*/
          ??
          public?class?ArithmeticUtils?{??
          ????//默認(rèn)除法運(yùn)算精度??
          ????private?static?final?int?DEF_DIV_SCALE?=?10;??
          ??
          ????/**??
          ?????*?提供精確的加法運(yùn)算??
          ?????*??
          ?????*?@param?v1?被加數(shù)??
          ?????*?@param?v2?加數(shù)??
          ?????*?@return?兩個(gè)參數(shù)的和??
          ?????*/
          ??
          ??
          ????public?static?double?add(double?v1,?double?v2)?{??
          ????????BigDecimal?b1?=?new?BigDecimal(Double.toString(v1));??
          ????????BigDecimal?b2?=?new?BigDecimal(Double.toString(v2));??
          ????????return?b1.add(b2).doubleValue();??
          ????}??
          ??
          ????/**??
          ?????*?提供精確的加法運(yùn)算??
          ?????*??
          ?????*?@param?v1?被加數(shù)??
          ?????*?@param?v2?加數(shù)??
          ?????*?@return?兩個(gè)參數(shù)的和??
          ?????*/
          ??
          ????public?static?BigDecimal?add(String?v1,?String?v2)?{??
          ????????BigDecimal?b1?=?new?BigDecimal(v1);??
          ????????BigDecimal?b2?=?new?BigDecimal(v2);??
          ????????return?b1.add(b2);??
          ????}??
          ??
          ????/**??
          ?????*?提供精確的加法運(yùn)算??
          ?????*??
          ?????*?@param?v1????被加數(shù)??
          ?????*?@param?v2????加數(shù)??
          ?????*?@param?scale?保留scale?位小數(shù)??
          ?????*?@return?兩個(gè)參數(shù)的和??
          ?????*/
          ??
          ????public?static?String?add(String?v1,?String?v2,?int?scale)?{??
          ????????if?(scale?0)?{??
          ????????????throw?new?IllegalArgumentException(??
          ????????????????????"The?scale?must?be?a?positive?integer?or?zero");??
          ????????}??
          ????????BigDecimal?b1?=?new?BigDecimal(v1);??
          ????????BigDecimal?b2?=?new?BigDecimal(v2);??
          ????????return?b1.add(b2).setScale(scale,?BigDecimal.ROUND_HALF_UP).toString();??
          ????}??
          ??
          ????/**??
          ?????*?提供精確的減法運(yùn)算??
          ?????*??
          ?????*?@param?v1?被減數(shù)??
          ?????*?@param?v2?減數(shù)??
          ?????*?@return?兩個(gè)參數(shù)的差??
          ?????*/
          ??
          ????public?static?double?sub(double?v1,?double?v2)?{??
          ????????BigDecimal?b1?=?new?BigDecimal(Double.toString(v1));??
          ????????BigDecimal?b2?=?new?BigDecimal(Double.toString(v2));??
          ????????return?b1.subtract(b2).doubleValue();??
          ????}??
          ??
          ????/**??
          ?????*?提供精確的減法運(yùn)算。??
          ?????*??
          ?????*?@param?v1?被減數(shù)??
          ?????*?@param?v2?減數(shù)??
          ?????*?@return?兩個(gè)參數(shù)的差??
          ?????*/
          ??
          ????public?static?BigDecimal?sub(String?v1,?String?v2)?{??
          ????????BigDecimal?b1?=?new?BigDecimal(v1);??
          ????????BigDecimal?b2?=?new?BigDecimal(v2);??
          ????????return?b1.subtract(b2);??
          ????}??
          ??
          ????/**??
          ?????*?提供精確的減法運(yùn)算??
          ?????*??
          ?????*?@param?v1????被減數(shù)??
          ?????*?@param?v2????減數(shù)??
          ?????*?@param?scale?保留scale?位小數(shù)??
          ?????*?@return?兩個(gè)參數(shù)的差??
          ?????*/
          ??
          ????public?static?String?sub(String?v1,?String?v2,?int?scale)?{??
          ????????if?(scale?0)?{??
          ????????????throw?new?IllegalArgumentException(??
          ????????????????????"The?scale?must?be?a?positive?integer?or?zero");??
          ????????}??
          ????????BigDecimal?b1?=?new?BigDecimal(v1);??
          ????????BigDecimal?b2?=?new?BigDecimal(v2);??
          ????????return?b1.subtract(b2).setScale(scale,?BigDecimal.ROUND_HALF_UP).toString();??
          ????}??
          ??
          ????/**??
          ?????*?提供精確的乘法運(yùn)算??
          ?????*??
          ?????*?@param?v1?被乘數(shù)??
          ?????*?@param?v2?乘數(shù)??
          ?????*?@return?兩個(gè)參數(shù)的積??
          ?????*/
          ??
          ????public?static?double?mul(double?v1,?double?v2)?{??
          ????????BigDecimal?b1?=?new?BigDecimal(Double.toString(v1));??
          ????????BigDecimal?b2?=?new?BigDecimal(Double.toString(v2));??
          ????????return?b1.multiply(b2).doubleValue();??
          ????}??
          ??
          ????/**??
          ?????*?提供精確的乘法運(yùn)算??
          ?????*??
          ?????*?@param?v1?被乘數(shù)??
          ?????*?@param?v2?乘數(shù)??
          ?????*?@return?兩個(gè)參數(shù)的積??
          ?????*/
          ??
          ????public?static?BigDecimal?mul(String?v1,?String?v2)?{??
          ????????BigDecimal?b1?=?new?BigDecimal(v1);??
          ????????BigDecimal?b2?=?new?BigDecimal(v2);??
          ????????return?b1.multiply(b2);??
          ????}??
          ??
          ????/**??
          ?????*?提供精確的乘法運(yùn)算??
          ?????*??
          ?????*?@param?v1????被乘數(shù)??
          ?????*?@param?v2????乘數(shù)??
          ?????*?@param?scale?保留scale?位小數(shù)??
          ?????*?@return?兩個(gè)參數(shù)的積??
          ?????*/
          ??
          ????public?static?double?mul(double?v1,?double?v2,?int?scale)?{??
          ????????BigDecimal?b1?=?new?BigDecimal(Double.toString(v1));??
          ????????BigDecimal?b2?=?new?BigDecimal(Double.toString(v2));??
          ????????return?round(b1.multiply(b2).doubleValue(),?scale);??
          ????}??
          ??
          ????/**??
          ?????*?提供精確的乘法運(yùn)算??
          ?????*??
          ?????*?@param?v1????被乘數(shù)??
          ?????*?@param?v2????乘數(shù)??
          ?????*?@param?scale?保留scale?位小數(shù)??
          ?????*?@return?兩個(gè)參數(shù)的積??
          ?????*/
          ??
          ????public?static?String?mul(String?v1,?String?v2,?int?scale)?{??
          ????????if?(scale?0)?{??
          ????????????throw?new?IllegalArgumentException(??
          ????????????????????"The?scale?must?be?a?positive?integer?or?zero");??
          ????????}??
          ????????BigDecimal?b1?=?new?BigDecimal(v1);??
          ????????BigDecimal?b2?=?new?BigDecimal(v2);??
          ????????return?b1.multiply(b2).setScale(scale,?BigDecimal.ROUND_HALF_UP).toString();??
          ????}??
          ??
          ????/**??
          ?????*?提供(相對(duì))精確的除法運(yùn)算,當(dāng)發(fā)生除不盡的情況時(shí),精確到??
          ?????*?小數(shù)點(diǎn)以后10位,以后的數(shù)字四舍五入??
          ?????*??
          ?????*?@param?v1?被除數(shù)??
          ?????*?@param?v2?除數(shù)??
          ?????*?@return?兩個(gè)參數(shù)的商??
          ?????*/
          ??
          ??
          ????public?static?double?div(double?v1,?double?v2)?{??
          ????????return?div(v1,?v2,?DEF_DIV_SCALE);??
          ????}??
          ??
          ????/**??
          ?????*?提供(相對(duì))精確的除法運(yùn)算。當(dāng)發(fā)生除不盡的情況時(shí),由scale參數(shù)指??
          ?????*?定精度,以后的數(shù)字四舍五入??
          ?????*??
          ?????*?@param?v1????被除數(shù)??
          ?????*?@param?v2????除數(shù)??
          ?????*?@param?scale 表示表示需要精確到小數(shù)點(diǎn)以后幾位。??
          ?????*?@return?兩個(gè)參數(shù)的商??
          ?????*/
          ??
          ????public?static?double?div(double?v1,?double?v2,?int?scale)?{??
          ????????if?(scale?0)?{??
          ????????????throw?new?IllegalArgumentException("The?scale?must?be?a?positive?integer?or?zero");??
          ????????}??
          ????????BigDecimal?b1?=?new?BigDecimal(Double.toString(v1));??
          ????????BigDecimal?b2?=?new?BigDecimal(Double.toString(v2));??
          ????????return?b1.divide(b2,?scale,?BigDecimal.ROUND_HALF_UP).doubleValue();??
          ????}??
          ??
          ????/**??
          ?????*?提供(相對(duì))精確的除法運(yùn)算。當(dāng)發(fā)生除不盡的情況時(shí),由scale參數(shù)指??
          ?????*?定精度,以后的數(shù)字四舍五入??
          ?????*??
          ?????*?@param?v1????被除數(shù)??
          ?????*?@param?v2????除數(shù)??
          ?????*?@param?scale?表示需要精確到小數(shù)點(diǎn)以后幾位??
          ?????*?@return?兩個(gè)參數(shù)的商??
          ?????*/
          ??
          ????public?static?String?div(String?v1,?String?v2,?int?scale)?{??
          ????????if?(scale?0)?{??
          ????????????throw?new?IllegalArgumentException("The?scale?must?be?a?positive?integer?or?zero");??
          ????????}??
          ????????BigDecimal?b1?=?new?BigDecimal(v1);??
          ????????BigDecimal?b2?=?new?BigDecimal(v1);??
          ????????return?b1.divide(b2,?scale,?BigDecimal.ROUND_HALF_UP).toString();??
          ????}??
          ??
          ????/**??
          ?????*?提供精確的小數(shù)位四舍五入處理??
          ?????*??
          ?????*?@param?v?????需要四舍五入的數(shù)字??
          ?????*?@param?scale?小數(shù)點(diǎn)后保留幾位??
          ?????*?@return?四舍五入后的結(jié)果??
          ?????*/
          ??
          ????public?static?double?round(double?v,?int?scale)?{??
          ????????if?(scale?0)?{??
          ????????????throw?new?IllegalArgumentException("The?scale?must?be?a?positive?integer?or?zero");??
          ????????}??
          ????????BigDecimal?b?=?new?BigDecimal(Double.toString(v));??
          ????????return?b.setScale(scale,?BigDecimal.ROUND_HALF_UP).doubleValue();??
          ????}??
          ??
          ????/**??
          ?????*?提供精確的小數(shù)位四舍五入處理??
          ?????*??
          ?????*?@param?v?????需要四舍五入的數(shù)字??
          ?????*?@param?scale?小數(shù)點(diǎn)后保留幾位??
          ?????*?@return?四舍五入后的結(jié)果??
          ?????*/
          ??
          ????public?static?String?round(String?v,?int?scale)?{??
          ????????if?(scale?0)?{??
          ????????????throw?new?IllegalArgumentException(??
          ????????????????????"The?scale?must?be?a?positive?integer?or?zero");??
          ????????}??
          ????????BigDecimal?b?=?new?BigDecimal(v);??
          ????????return?b.setScale(scale,?BigDecimal.ROUND_HALF_UP).toString();??
          ????}??
          ??
          ????/**??
          ?????*?取余數(shù)??
          ?????*??
          ?????*?@param?v1????被除數(shù)??
          ?????*?@param?v2????除數(shù)??
          ?????*?@param?scale?小數(shù)點(diǎn)后保留幾位??
          ?????*?@return?余數(shù)??
          ?????*/
          ??
          ????public?static?String?remainder(String?v1,?String?v2,?int?scale)?{??
          ????????if?(scale?0)?{??
          ????????????throw?new?IllegalArgumentException(??
          ????????????????????"The?scale?must?be?a?positive?integer?or?zero");??
          ????????}??
          ????????BigDecimal?b1?=?new?BigDecimal(v1);??
          ????????BigDecimal?b2?=?new?BigDecimal(v2);??
          ????????return?b1.remainder(b2).setScale(scale,?BigDecimal.ROUND_HALF_UP).toString();??
          ????}??
          ??
          ????/**??
          ?????*?取余數(shù)??BigDecimal??
          ?????*??
          ?????*?@param?v1????被除數(shù)??
          ?????*?@param?v2????除數(shù)??
          ?????*?@param?scale?小數(shù)點(diǎn)后保留幾位??
          ?????*?@return?余數(shù)??
          ?????*/
          ??
          ????public?static?BigDecimal?remainder(BigDecimal?v1,?BigDecimal?v2,?int?scale)?{??
          ????????if?(scale?0)?{??
          ????????????throw?new?IllegalArgumentException(??
          ????????????????????"The?scale?must?be?a?positive?integer?or?zero");??
          ????????}??
          ????????return?v1.remainder(v2).setScale(scale,?BigDecimal.ROUND_HALF_UP);??
          ????}??
          ??
          ????/**??
          ?????*?比較大小??
          ?????*??
          ?????*?@param?v1?被比較數(shù)??
          ?????*?@param?v2?比較數(shù)??
          ?????*?@return?如果v1?大于v2?則?返回true?否則false??
          ?????*/
          ??
          ????public?static?boolean?compare(String?v1,?String?v2)?{??
          ????????BigDecimal?b1?=?new?BigDecimal(v1);??
          ????????BigDecimal?b2?=?new?BigDecimal(v2);??
          ????????int?bj?=?b1.compareTo(b2);??
          ????????boolean?res;??
          ????????if?(bj?>?0)??
          ????????????res?=?true;??
          ????????else??
          ????????????res?=?false;??
          ????????return?res;??
          ????}??
          }

          來(lái)源:cnblogs.com/zhangyinhua/p/11545305.html

          作者:uaToDevelop

          ????

          1、來(lái)發(fā)SQL,

          2、?Chrome,會(huì)個(gè)?

          3、個(gè)SpringBoot44Java

          4、QQ個(gè),

          5、SpringBoot?發(fā),過(guò)?

          點(diǎn)

          點(diǎn)

          點(diǎn)點(diǎn)

          點(diǎn)

          瀏覽 58
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91视频久久久久久久久久 | 最新成人美女视频 | 免费在线一级黄色电影网站 | 自拍偷拍第六页 | 老司机天天综合网 |