java型別轉換與強制型別轉換(轉)
java型別轉換與強制型別轉換(轉)[@more@]如果你以前有程式設計經驗,那麼你已經知道把一種型別的值賦給另外型別的一個變數是相當常見的。如果這2種型別是相容的,那麼Java 將自動地進行轉換。例如,把int 型別的值賦給long 型別的變數,總是可行的。然而,不是所有的型別都是相容的,因此,不是所有的型別轉換都是可以隱式實現的。例如,沒有將double 型轉換為byte 型的定義。幸好,獲得不相容的型別之間的轉換仍然是可能的。要達到這個目的,你必須使用一個強制型別轉換,它能完成兩個不相容的型別之間的顯式變換。讓我們看看自動型別轉換和強制型別轉換。
3.9.1 Java 的自動轉換
如果下列2個條件都能滿足,那麼將一種型別的資料賦給另外一種型別變數時,將執行自動型別轉換(automatic type conversion):
·這2
種型別是相容的。
·
目的型別數的範圍比來源型別的大。
當以上2個條件都滿足時,拓寬轉換(widening conversion )發生。例如,int 型的範圍比所有byte 型的合法範圍大,因此不要求顯式強制型別轉換語句。
對於拓寬轉換,數字型別,包括整數(integer )和浮點(floating-point )型別都是彼此相容的,但是,數字型別和字元型別(char)或布林型別(bollean )是不相容的。字元型別(char )和布林型別(bollean )也是互相不相容的。
3.9.2 不相容型別的強制轉換
儘管自動型別轉換是很有幫助的,但並不能滿足所有的程式設計需要。例如,如果你需要將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。
3.9.1 Java 的自動轉換
如果下列2個條件都能滿足,那麼將一種型別的資料賦給另外一種型別變數時,將執行自動型別轉換(automatic type conversion):
·這2
種型別是相容的。
·
目的型別數的範圍比來源型別的大。
當以上2個條件都滿足時,拓寬轉換(widening conversion )發生。例如,int 型的範圍比所有byte 型的合法範圍大,因此不要求顯式強制型別轉換語句。
對於拓寬轉換,數字型別,包括整數(integer )和浮點(floating-point )型別都是彼此相容的,但是,數字型別和字元型別(char)或布林型別(bollean )是不相容的。字元型別(char )和布林型別(bollean )也是互相不相容的。
3.9.2 不相容型別的強制轉換
儘管自動型別轉換是很有幫助的,但並不能滿足所有的程式設計需要。例如,如果你需要將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。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-958143/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PHP 型別轉換&&型別強制轉換PHP型別
- 強制型別轉換型別
- 造型與強制型別轉換型別
- 強制型別轉換之(==)型別
- C++強制型別轉換C++型別
- C++ 的強制型別轉換C++型別
- JavaScript中的強制型別轉換JavaScript型別
- C C++ 強制型別轉換C++型別
- javascript強制型別轉換與操作符JavaScript型別
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- 深入淺出說強制型別轉換型別
- JS在if中的強制型別轉換JS型別
- c++四種強制型別轉換C++型別
- 引用型別變數的強制轉換型別變數
- 型別轉換型別
- Java資料型別及型別轉換Java資料型別
- Javascript基礎之-強制型別轉換(三)JavaScript型別
- JavaScript強制型別轉換的背後操作JavaScript型別
- Javascript基礎之-強制型別轉換(一)JavaScript型別
- 【Java】資料型別轉換Java資料型別
- java中的型別轉換Java型別
- 資料型別,型別轉換資料型別
- dataguard型別轉換與模式轉化型別模式
- js型別轉換JS型別
- 字元型別轉換字元型別
- 3.2 型別轉換型別
- JavaScript 型別轉換JavaScript型別
- Golang型別轉換Golang型別
- 型別轉換(cast)型別AST
- 日期型別與String型別的轉換型別
- 強制型別轉換(int)、(int&)和(int*)的區別型別
- C++ 中四種強制型別轉換的區別C++型別
- C++中的向上型別轉換和向下型別轉換C++型別
- 2、java資料型別轉換Java資料型別
- java基礎:型別轉換castJava型別AST
- JAVA型別轉換怎麼變Java型別
- interface{} 型別的轉換型別
- JNI常用型別轉換型別