Java型別轉換之自動型別轉換和強制型別轉換區別理解總結
阿新 • • 發佈:2019-02-13
首先 , 晒出一段測試程式碼
/*
* 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("------------------------在運算的時候,會將不相同的資料型別轉換成相同的資料型別然後在開始運算----------------");
接下來是測試結果顯示圖片
通過測試的結果,我有了個猜測
( 需要運算的值型別不同 ) 自動型別轉換 和 強制型別轉換 的執行過程為:
猜測 :
運算的時候 , 會將需要運算的 不相同的資料型別 全部轉換成 參與運算中 的 資料型別中最大的那個資料型別