七、Java類型轉換

類型轉換
java

自動類型轉換

自動類型轉換指的是容量小的數據類型能夠自動轉換爲空量大的數據類型。(容量大小不是看字節數來定的,是按照類型能夠容納多的數來定的,因此long,能夠自動轉爲float)code

//特例:
    byte a = 123;    //常量是爲int,可是這裏沒有報錯,就是由於自動轉換
    //byte b = 1234; //報錯,是由於1234這個常量的值超過byte類型的最大值了

強制類型轉換

強制類型轉換,是用於顯式的轉換一個數值的類型,在有可能丟失信息的狀況下進行的轉換是可能形成精度的溢出或下降的。
例:blog

double a = 1.2222;
    int b = (int) a;
    System.out.println("b=" + b);  
    //結果爲:b=1
    //精度變低了,而且沒有小數部分了

基本數據轉換的一個經典錯誤

操做較大的數的時候,有時會在不經意間溢出,尤爲是操做整數的時候。內存

int a = 1000000000;  //10億
    int b = 20;
    int num = a * b;
    System.out.println("num=" + num);
    //輸出的結果:num=-1474836480
    //輸出的結果是一個負數,是由於a和b的乘積已經超過了int的最大值了
    //發生了內存溢出問題,因此就變成一個負數了。可是若是是下面這樣呢:

    long num2 = a * b;
    System.out.println("num2=" + num2);
    //輸出的結果仍是:num2=-1474836480
    //輸出的結果仍是一個負數,是由於 = 符號從右往左運算的,先計算左邊的值
    //再賦值給右邊,當右邊計算完成時,仍是一個int類型,
    //可是已經溢出了,再轉爲long類型也沒有用了
    //下面的是正確的:

    long num3 = a * (long)b;
    System.out.println("num3=" + num3);
    //結果爲:num3=20000000000
    //爲何能夠成功呢?
    //由於在等號右邊進行計算前,b已經轉爲long類型了,
    //因此當一個表達式中有一個long類型的時候,這個表達式的值爲long的。





細節決定成敗!

我的愚見,若有不對,懇請扶正!
相關文章
相關標籤/搜索