程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java類型轉換與強制類型轉換

Java類型轉換與強制類型轉換

編輯:關於JAVA

如果你以前有編程經驗,那麼你已經知道把一種類型的值賦給另外類型的一個變量是相當常見的。如果這2種類型是兼容的,那麼Java 將自動地進行轉換。例如,把int 類型的值賦給long 類型的變量,總是可行的。然而,不是所有的類型都是兼容的,因此,不是所有的類型轉換都是可以隱式實現的。例如,沒有將double 型轉換為byte 型的定義。幸好,獲得不兼容的類型之間的轉換仍然是可能的。要達到這個目的,你必須使用一個強制類型轉換,它能完成兩個不兼容的類型之間的顯式變換。讓我們看看自動類型轉換和強制類型轉換。

 Java 的自動轉換

如果下列2個條件都能滿足,那麼將一種類型的數據賦給另外一種類型變量時,將執行自動類型轉換(automatic type conversion):

·這2種類型是兼容的。

·目的類型數的范圍比來源類型的大。

當以上2個條件都滿足時,拓寬轉換(widening conversion )發生。例如,int 型的范圍比所有byte 型的合法范圍大,因此不要求顯式強制類型轉換語句。

對於拓寬轉換,數字類型,包括整數(integer )和浮點(floating-point )類型都是彼此兼容的,但是,數字類型和字符類型(char)或布爾類型(bollean )是不兼容的。字符類型(char )和布爾類型(bollean )也是互相不兼容的。

不兼容類型的強制轉換

盡管自動類型轉換是很有幫助的,但並不能滿足所有的編程需要。例如,如果你需要將int 型的值賦給一個byte 型的變量,你將怎麼辦?這種轉換不會自動進行,因為byte 型的變化范圍比int 型的要小。這種轉換有時稱為“縮小轉換”(),因為你肯定要將源數據類型的值變小才能適合目標數據類型。

為了完成兩種不兼容類型之間的轉換,你就必須進行強制類型轉換。所謂強制類型轉換只不過是一種顯式的類型變換。它的通用格式如下:

(target-type)value

其中,目標類型(target-type )指定了要將指定值轉換成的類型。例如,下面的程序段將int 型強制轉換成byte 型。如果整數的值超出了byte 型的取值范圍,它的值將會因為對byte 型值域取模(整數除以byte 得到的余數)而減少。

int a;
byte b;
// ...
b = (byte) a;

當把浮點值賦給整數類型時一種不同的類型轉換發生了:截斷(truncation )。你知道整數沒有小數部分。這樣,當把浮點值賦給整數類型時,它的小數部分會被捨去。例如,如果將值1.23賦給一個整數,其結果值只是1,0.23 被丟棄了。當然,如果浮點值太大而不能適合目標整數類型,那麼它的值將會因為對目標類型值域取模而減少。

下面的程序說明了強制類型轉換:

// Demonstrate casts.
class Conversion {


public static void main(String args[]) {
byte b;
int i = 257; 
double d = 323.142; 


System.out.println("
Conversion of int to byte.");
b = (byte) i;
System.out.println("i and b " + i + " " + b); 


System.out.println("
Conversion of double to int.");
i = (int) d;
System.out.println("d and i " + d + " " + i); 


System.out.println("
Conversion of double to byte.");
b = (byte) d;
System.out.println("d and b " + d + " " + b);


}
}

該程序的輸出如下:

Conversion of int to byte.
i and b 257 1 


Conversion of double to int. 
d and i 323.142 323 


Conversion of double to byte.
d and b 323.142 67

讓我們看看每一個類型轉換。當值257被強制轉換為byte 變量時,其結果是257除以256 (256是byte 類型的變化范圍)的余數1。當把變量d轉換為int 型,它的小數部分被捨棄了。當把變量d轉換為byte 型,它的小數部分被捨棄了,而且它的值減少為256 的模,即67。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved