java類型轉換常見的錯誤


類型轉換雖然很簡單,但是還是有些小細節要多注意。

  • String轉化為int:
String test="123";
int number=Integer.parseInt(test);
  • String轉化為Integer,可以如下所示。

也適用於int轉化為Integer:

String test="123";
// String test="abc";  //會報錯:NumberFormatException: For input string
Integer number=Integer.valueOf(test);

注意:不管是使用Integer.parseInt(),還是使用Integer.valueOf()將字符串轉換成數字,

如果是非數字的字符串,會報錯:NumberFormatException: For input string: ""

另外,Integer類取值和 int 類型取值一致,取值范圍是從-2147483648 至 2147483647(-231至 231-1) ,包括-2147483648 和 2147483647。

如果超過了這個范圍,也會報錯。比如Integer.valueOf("2147483648"),超過了Integer范圍。因此會報錯: For input string: "2147483648"

更安全的做法是,使用apache包的NumberUtils,如下:

注意:NumberUtils只處理整數,不能用來處理小數。

String str="abc";
//str不為數字時,設置默認值為 0
int num = NumberUtils.toInt(str);
//str不為數字時,設置默認值為其他值,比如1
int defaultNum=NumberUtils.toInt(str,1);
  • String轉BigDecimal:
  String str1="2.30";
  BigDecimal bd=new BigDecimal(str1);
  • String轉double :
  double value = NumberUtils.toDouble("4.23");

  • Double轉化為int:
Double test=new Double("1.23");  //Double初始化,最好用String保證精度
int result=test.intValue();
  • 其他類型轉String:
//  Object obj="123";
String test=String.valueOf(obj);

注意:當String.valueOf()的參數obj為null時,返回值是字符串"null"!!而不是null。

如果希望obj為null時,返回"",可以使用apache-commons-lang的包,如下所示:

Object object=null;
String str = ObjectUtils.toString(object);  //object為null時,結果為""

如果希望obj為null時,返回null,如下:

ObjectUtils.toString(object,nullStr),第二參數nullStr表示,當object為null時,方法返回的值。

// Object obj=null;
Object object="123";
String str = ObjectUtils.toString(object,null);
//相當於 String str= (object == null) ? null : object.toString();
  • Integer轉double:
    使用doubleValue()方法,或者 (double)強制轉換。
      Integer a= new Integer(5);
      int intvalue=a.intValue();
      double doublevalue=a.doubleValue();
  • 其他類型轉Double:
Double rate= Double.valueOf(obj);
  • 比較小數是否相等。

比較Double是否相等。比較BigDecimal是否相等。

如下所示:

double value=1.23;
if (BigDecimal.ZERO.compareTo(BigDecimal.valueOf(value)) == 0) {
      //
}
  • 比較Double類型的大小:
if (Double.valueOf(d1).compareTo(Double.valueOf(d2))<0) {
    //...
}

  • 比較double類型的大小:

除了用BigDemical的compare()方法,可以直接用Double.doubleToLongBits()的結果值用==,>,<進行比較

      if(Double.doubleToLongBits(d1) == Double.doubleToLongBits(d2))){
            //      
      }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM