1. 程式人生 > >Java型別轉換之自動型別轉換和強制型別轉換區別理解總結

Java型別轉換之自動型別轉換和強制型別轉換區別理解總結

首先 , 晒出一段測試程式碼

/*
* java中基本資料型別轉換的總結 (需要運算的值型別相同)
*/

// 宣告測試變數
int a;
int b;
long c;

// 分割線
System.out.println("\n-------------------------------------------------------------------------------------------");
System.out.println("-------------------------------------需要運算的值型別是相同的------------------------------------"
); System.out.println("------------------------------------Int最大值:" + Integer.MAX_VALUE+"------------------------------------"); System.out.println("--------------------------------Long最大值:" + Long.MAX_VALUE+"------------------------------"); System.out.println("-------------------------------------------------------------------------------------------\n"
); // 自動型別轉換(a * b的值小於int型別的最大值) a = 1; b = 2147483647; c = a * b; System.out.println("----------------------------------------c = a * b------------------------------------------"); System.out.println("自動型別轉換(a * b的值小於或等於int型別的最大值) : a的數值為:" + a + ",b的數值為:" + b + ",c的數值為:" + c); // 強制型別轉換(a * b的值小於int型別的最大值) a = 1
; b = 2147483647; c = (long) a * b; System.out.println("\n-------------------------------------c = (long) a * b--------------------------------------"); System.out.println("強制型別轉換(a * b的值小於或等於int型別的最大值) : a的數值為:" + a + ",b的數值為:" + b + ",c的數值為:" + c); System.out.println("\n-------------------------------------------------------------------------------------------"); // 分割線 System.out.println("----------上面的是a * b的值小於或等於int型別的最大值-------下面的是a * b的值大於int型別的最大值-----------"); System.out.println("-------------------------------------------------------------------------------------------\n"); // 自動型別轉換(a * b的值大於int型別的最大值) a = 2; b = 2147483647; c = a * b; System.out.println("----------------------------------------c = a * b------------------------------------------"); System.out.println("自動型別轉換(a * b的值大於int型別的最大值) : a的數值為:" + a + ",b的數值為:" + b + ",c的數值為:" + c); // 強制型別轉換(a * b的值大於int型別的最大值) a = 2; b = 2147483647; c = (long) a * b; System.out.println("\n-------------------------------------c = (long) a * b--------------------------------------"); System.out.println("強制型別轉換(a * b的值大於int型別的最大值) : a的數值為:" + a + ",b的數值為:" + b + ",c的數值為:" + c); // 分割線 System.out.println("-------------------------------------------------------------------------------------------\n"); System.out.println("------------------------------------------最後總結-------------------------------------------"); System.out.println("------------------------------------如果運算的值型別是相同的-------------------------------------\n"); System.out.println("-----------------------------------------自動型別轉換-----------------------------------------"); System.out.println("-------------------------在運算結果不超過本身值型別最大值的情況下,運算結果沒問題------------------------"); System.out.println("-----------------------但是如果運算結果超過了本身值型別最大值的情況下,運算結果有誤!----------------------\n"); System.out.println("-----------------------------------------強制型別轉換-----------------------------------------"); System.out.println("-------------------------在運算結果不超過本身值型別最大值的情況下,運算結果沒問題------------------------"); System.out.println("------------------------如果運算結果超過了本身值型別最大值的情況下,運算結果沒問題!----------------------");

接下來是測試結果顯示圖片

這裡寫圖片描述

通過測試的結果,我有了兩個猜測

( 需要運算的值型別相同 ) 自動型別轉換 和 強制型別轉換 的執行過程為:

猜測一 :
自動型別轉換 , 為 先進行值之間的運算 , 然後把結果值的型別轉換
強制型別轉換 , 為 先將需要運算的值進行型別轉換 , 然後進行值之間的運算

猜測二 :
自動型別轉換 , 使用 運算的值型別最大值為界限 , 如果 超出了這個值 , 那麼 運算將出錯
強制型別轉換 , 使用 需要強轉的值型別最大值為界限 , 如果 超出了這個值 , 那麼 運算將出錯

再晒出一段程式碼

/*
 * java中基本資料型別轉換的總結 (需要運算的值型別不同)
 */

// 宣告測試變數
int a;
long b;
long c;

// 分割線
System.out.println("\n-------------------------------------------------------------------------------------------");
System.out.println("-------------------------------------需要運算的值型別是不同的------------------------------------");
System.out.println("------------------------------------Int最大值:" + Integer.MAX_VALUE+"------------------------------------");
System.out.println("--------------------------------Long最大值:" + Long.MAX_VALUE+"------------------------------");
System.out.println("-------------------------------------------------------------------------------------------\n");

// 自動型別轉換(c的值小於int型別的最大值)
a = 1;
b = 2147483647;
c = a * b;
System.out.println("----------------------------------------c = a * b------------------------------------------");
System.out.println("自動型別轉換(a * b的值小於或等於int型別的最大值) : a的數值為:" + a + ",b的數值為:" + b + ",c的數值為:" + c);

// 強制型別轉換(c的值小於int型別的最大值)
a = 1;
b = 2147483647;
c = (long) a * b;
System.out.println("\n-------------------------------------c = (long) a * b--------------------------------------");
System.out.println("強制型別轉換(a * b的值小於或等於int型別的最大值) : a的數值為:" + a + ",b的數值為:" + b + ",c的數值為:" + c);

// 分割線
System.out.println("\n-------------------------------------------------------------------------------------------");
System.out.println("----------上面的是a * b的值小於或等於int型別的最大值-------下面的是a * b的值大於int型別的最大值-----------");
System.out.println("-------------------------------------------------------------------------------------------\n");

// 自動型別轉換(c的值大於int型別的最大值)
a = 2;
b = 2147483647;
c = a * b;
System.out.println("----------------------------------------c = a * b------------------------------------------");
System.out.println("自動型別轉換(a * b的值大於int型別的最大值) : a的數值為:" + a + ",b的數值為:" + b + ",c的數值為:" + c);

// 強制型別轉換(c的值大於int型別的最大值)
a = 2;
b = 2147483647;
c = (long) a * b;
System.out.println("\n-------------------------------------c = (long) a * b--------------------------------------");
System.out.println("強制型別轉換(a * b的值大於int型別的最大值) : a的數值為:" + a + ",b的數值為:" + b + ",c的數值為:" + c);

// 分割線
System.out.println("-------------------------------------------------------------------------------------------\n");
System.out.println("------------------------------------------最後總結-------------------------------------------");
System.out.println("------------------------------------如果運算的值型別是不同的-------------------------------------\n");
System.out.println("-----------------------------------------自動型別轉換-----------------------------------------");
System.out.println("------------------------在運算的時候,會將不相同的資料型別轉換成相同的資料型別然後在開始運算----------------\n");
System.out.println("-----------------------------------------強制型別轉換-----------------------------------------");
System.out.println("------------------------在運算的時候,會將不相同的資料型別轉換成相同的資料型別然後在開始運算----------------");

接下來是測試結果顯示圖片

這裡寫圖片描述

通過測試的結果,我有了個猜測

( 需要運算的值型別不同 ) 自動型別轉換 和 強制型別轉換 的執行過程為:

猜測 :
運算的時候 , 會將需要運算的 不相同的資料型別 全部轉換成 參與運算中資料型別中最大的那個資料型別