Java中的縮窄是什麼?請解釋。


Java提供各種資料型別來儲存各種資料值。它提供瞭如下所示的7種基本資料型別(儲存單個值):

  • boolean − 儲存表示真或假的1位值。
  • byte − 儲存最多8位的二進位制補碼整數。
  • char − 儲存最多16位的Unicode字元值。
  • short − 儲存最多16位的整數值。
  • int − 儲存最多32位的整數值。
  • long − 儲存最多64位的整數值。
  • float − 儲存最多32位的浮點值。
  • double − 儲存最多64位的浮點值。

將一種基本資料型別轉換為另一種型別稱為型別轉換。型別轉換有兩種:

  • 擴充套件轉換 − 將較低資料型別轉換為較高資料型別稱為擴充套件轉換。
  • 縮窄轉換 − 將較高資料型別轉換為較低資料型別稱為縮窄轉換。

當您將較低資料型別賦值給較高資料型別時,Java編譯器會隱式地進行轉換並賦值給指定的變數。

示例

 線上演示

public class CastingExample {
   public static void main(String args[]){
      char ch = 'C';
      int i = ch;
      System.out.println("Integer value of the given character: "+i);
      float f = 10021.224f;
      double d = f;
      System.out.println("double value: "+d);
   }
}

輸出

Integer value of the given character: 67
double value: 10021.2236328125

但是,當您嘗試將較高資料型別賦值給較低資料型別時,編譯時會收到“不相容的型別:可能存在精度損失轉換”錯誤。

在下面的示例中,我們嘗試將整數值賦值給字元變數:

示例

public class CastingExample {
   public static void main(String args[]){
      int i = 67;
      char ch = i;
      System.out.println("Character value of the given integer: "+ch);
   }
}

編譯時錯誤

編譯上述程式時,會生成以下錯誤。

CastingExample.java:4: error: incompatible types: possible lossy conversion from int to char
char ch = i;
^
1 error

在下面的示例中,我們嘗試將雙精度值賦值給浮點型變數。

示例

public class CastingExample {
   public static void main(String args[]){
      double d = 10021.224d;
      float f = d;
      System.out.println("double value: "+f);
   }
}

編譯時錯誤

編譯上述程式時,會生成以下錯誤。

CastingExample.java:22: error: incompatible types: possible lossy conversion from double to float
float f = d;
^
1 error

顯式轉換

因此,要將較高資料型別賦值給較低資料型別,需要使用強制型別轉換運算子顯式轉換:

float f = (float)d;

讓我們透過顯式轉換重寫Example2和Example3。

在下面的示例中,我們嘗試透過使用強制型別轉換運算子顯式轉換將整數值賦值給字元變數:

示例

 線上演示

public class CastingExample {
   public static void main(String args[]){
      int i = 67;
      char ch = (char)i;
      System.out.println("Character value of the given integer: "+ch);
   }
}

輸出

Character value of the given integer: C

在下面的示例中,我們嘗試透過使用強制型別轉換運算子顯式轉換將雙精度值賦值給浮點型變數。

示例

 線上演示

public class CastingExample {
   public static void main(String args[]){
      double d = 10021.224d;
      float f = (float)d;
      System.out.println("double value: "+f);
   }
}

輸出

double value: 10021.224

更新於:2019年7月30日

5K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.