(詳解)Java資料型別轉換以及精度損失的問題
阿新 • • 發佈:2019-02-10
在Java語言基礎中, 資料型別分為基本資料型別和引用資料型別.
在這裡, 從計算機底層(二進位制的層面)介紹和分析基本資料型別(也就是四類八種)的轉換. 而且轉換分為兩種 -- 隱式轉換和強制轉換.
隱式轉換
A: 案例演示
a: int + int
b: byte + int
B: Java中的預設轉換規則
取值範圍小的資料型別與取值範圍大的資料型別進行運算,會先將小的資料型別提升為大的,再運算
int m = 10;
byte n = 20;
n = m + n;
B: 強制轉換的格式
n = (byte) (m + n);
C: 強制轉換的注意事項
如果超出了被賦值的資料型別的取值範圍得到的結果會與你期望的結果不同
程式演示:
在這裡, 從計算機底層(二進位制的層面)介紹和分析基本資料型別(也就是四類八種)的轉換. 而且轉換分為兩種 -- 隱式轉換和強制轉換.
隱式轉換
A: 案例演示
a: int + int
b: byte + int
B: Java中的預設轉換規則
取值範圍小的資料型別與取值範圍大的資料型別進行運算,會先將小的資料型別提升為大的,再運算
C: 畫圖解釋byte+int型別的問題
首先, 我們知道byte在記憶體中佔一個位元組, 而一個位元組等於8個位元位(二進位制位). 1 byte = 8 bit
int在記憶體裡是佔四個位元組.
強制轉換
A: 強制轉換問題int m = 10;
byte n = 20;
n = m + n;
B: 強制轉換的格式
n = (byte) (m + n);
C: 強制轉換的注意事項
如果超出了被賦值的資料型別的取值範圍得到的結果會與你期望的結果不同
程式演示:
package org.lxy.datatype; /** * @author menglanyingfei * @date 2017-2-10 */ public class Test { public static void main(String[] args) { int x = 3, y = 2; byte b = 4; x = x + b; System.out.println("隱式轉換:"); System.out.println(x + y); // 9 System.out.println(x); // 7 int m = 126; byte n = 4; n = (byte) (m + n); // 注意byte的取值範圍為-128~127 System.out.println("強制轉換:"); System.out.println(n); // 結果不是130, 而是-126 } }
D: 圖解(下面圖裡的計算會涉及原碼反碼補碼的知識, 不知道或忘記了的小夥伴可以先仔細看看最下面的知識補充!)
知識補充圖: