JAVA數據類型能串門不?

JAVA這幾種數據類型,可否串門?入了人家門,就得按人家規矩來,入鄉隨俗哦,不免發生有自覺的 還有不情願被動的。測試

自動類型轉換

自動類型轉換:容量小的數據類型能夠自動轉換爲容量大的數據類型。在圖中,黑色的實線表示無數據丟失的自動類型轉換,而紅色的虛線表示在轉換時可能會精度的損失。spa

特例: 能夠將整型常量直接賦值給byte, short, char等類型變量,而不須要進行強制類型轉換,只要不超出其表數範圍code

        Short  b = 12;         //合法
        short  b = 1234567;    //非法

強制類型轉換(Cast)

    強制類型轉換,又被稱爲造型,用於顯式的轉換一個數值的類型. 在有可能丟失信息的狀況下進行的轉換是經過造型來完成的,但可能形成精度下降或溢出。對象

    強制類型轉換的語法格式:「(type)var」,運算符「()」中的type表示將值var想要轉換成的目標數據類型。blog

          double x  = 3.14int nx = (int)x;   //值爲3
          char c = 'a';
          int d = c+1;
          System.out.println(d);
          System.out.println((char)d);

    當將一種類型強制轉換成另外一種類型,而又超出了目標類型的表示範圍,就會被截斷成爲一個徹底不一樣的值。ast

            int x = 300;
            byte bx = (byte)x;    //值爲44

    不能在布爾類型和任何數值類型之間作強制類型轉換。class

    若是須要把布爾類型轉換成一個數字該怎麼辦呢?變量

基本類型轉化時常見錯誤和問題

1.操做比較大的數時,要留意是否溢出,尤爲是整數操做時。數據類型

    int money = 1000000000;  //10億
    int years = 20;
    int total = money*years;   //返回的是負數
    long total1 = money*years;  //返回的仍然是負數。默認是int,所以結果會轉成int值,再轉成long。可是已經發生了數據丟失
    long total2 = money*((long)years);   //先將一個因子變成long,整個表達式發生提高。所有用long來計算。

2. 眼神很差使用L和l 注意哦,別和1混淆了(不要命名名字爲l的變量,long類型使用大寫L不要用小寫)語法

        int l = 2;
        long a = 23451l;
        System.out.println(l+1);

代碼

//測試自動轉型和強制轉型 
public class TestCast {
    public static void main(String[] args){
    byte b = 123;
    byte b2 = 300;
    char c = -3;
    char c2 = 'a';
    int i = c2;
    long d01 = 123213;
    float f = d01;
    //測試強制轉型
    int i2 = -100;
    char c3 = (char)i2;   //-100超過char的表數範圍,因此轉換成徹底不一樣的值,無心義的值!
    System.out.println(c3);
//表達式中的類型提高問題
    int a = 3;
    long b = 4;
    double d = 5.3;
    int c = (int)(a+b);   //作全部的二元運算符(+-/*%),都會有類型提高的問題!
    float f = (float)(a + d);
    int money = 1000000000;  //10億
    int years = 20;
    long total = (long)money*years;   //返回的是負數
    System.out.println(total);
//一我的70年心跳多少次
    long times = 70L*60*24*365*70;
    System.out.println(times);
    } 
}

固然以上都是皮毛,其實萬事皆可盤,那麼類型轉換呢,什麼對象均可以去嘗試轉換,這之後說哦

相關文章
相關標籤/搜索