1. 程式人生 > >Java中型別強制轉換的問題

Java中型別強制轉換的問題

型別轉換

  1. boolean不能轉換成其他型別的資料型別
  2. 預設轉換
    • byte,short,char——int——long——float——double
    • byte,short,char相互之間不轉換,參與運算首先轉換成int型別
  3. 強制轉換:
    • 目標型別 變數名 = (目標型別)(被轉換的資料)

損失精度例項

  • double和float型別
//double和float型別
public void test1(){
        double d = 12.345;
        /**
         * 將double的值賦值給float,需要加強制型別轉換
         */
//float f = d;//編譯不能通過 /** * 兩種方式都可以定義float型別,但是第一種是一個double經過強制轉換的 * 第二種是直接為float型別的資料 */ float f1 = (float) 12.345; float f2 = 12.345F; }
  • byte型別
// byte型別
public void test2(){
        byte b1 = 3, b2 = 4, b;
        /**
         *  對於變數而言,先提升它的型別為int,再做計算,這是將兩個整形型別轉換為
         *  type型別,會發生進度損失錯誤
         */
//b = b1+b2;//不能通過編譯 b = 3 + 4;//常量,先計算結果,然後檢視是否在byte的範圍內,如果在就不報錯 }
public void test3(){
        /**
         * byte b = 130;
         * 是否有問題?若有,怎麼改正?結果是多少?
         */

        /**
         * byte的取值範圍:-128~127,130超出範圍,報錯
         */
        //byte b = 130;//不能通過編譯

        //使用強制型別轉換
        byte
b = (byte) 130;//輸出結果為-126 /** * 結果分析如下: * 計算機中資料的運算都是通過補碼進行計算的 * ①:獲取130這個資料的二進位制碼 * 00000000 00000000 00000000 10000010 * 這是130的原碼,也是反碼,還是補碼 * ②:int型別為4個位元組,byte為1個位元組,做擷取操作 * 10000010 * 這個結果為補碼 * ③:已知補碼求原碼: * 符號位 數值位 * 補碼 1 0000010 * 反碼 1 0000001 * 原碼 1 1111110 */ System.out.println(b);//-126 }
  • char 和int
public void test4(){
        /**
         * 瞭解ASCII表
         * 'a' 97
         * 'A' 65
         * '0' 48
         */
        System.out.println('a');//a
        System.out.println('a'+1);//97
    }
  • String
public void test5() {
        /**
         * 字串和其他資料做'+'運算,結果是字串型別
         * 此時'+'不為加法運算,為字串連線符
         */
        System.out.println("hello" + 'a' + 1);//helloa1
        System.out.println('a' + 1 + "hello");//98hello

        System.out.println("5+5=" + 5 + 5);//5+5=55
        System.out.println(5 + 5 + "=5+5");//10=5+5
    }