官术网_书友最值得收藏!

2.2.5 數據類型轉換

數據類型轉換是將一種數據類型的值轉換成另一種數據類型的值的操作。當把一種數據類型的值賦給另一種數據類型的變量時,需要進行數據類型轉換。數據類型轉換方式有兩種:自動類型轉換與強制類型轉換。

1.自動類型轉換

將取值范圍較小的類型的數值賦給取值范圍較大的類型的變量時,Java會自動將取值范圍較小的數值轉換為取值范圍較大的類型,這稱為自動類型轉換。自動類型轉換按數據類型取值范圍從小到大的順序轉換,不同類型數據間的優先關系為:byte → short → int → long → float →double。

另外,char型可以自動轉換為int型。

【示例】自動類型轉換,代碼如下。


double num1=100;                 //將整型值100賦給double型變量num1 
System.out.println(num1);      //將輸出100.0,而不是100

控制臺輸出100.0,而不是原始值100,證明發生了數據類型轉換。這里整型值100賦給double型變量num1,雖然類型不一致,但由于值100作為int型,其取值范圍比賦值目標變量的double型的取值范圍要?。灰虼税凑丈鲜鲰樞?,它可以自動轉換為double型,再賦給double型變量num1。同樣,已賦過值的取值范圍較小的類型的變量賦給取值范圍較大的變量時,會發生自動類型轉換。代碼如下。


int num1=100; 
double num2=num1;   //int型變量賦給double型變量時,發生自動類型轉換 
System.out.println(num2);

其他自動類型轉換示例程序,代碼如下。


public static void main(String[]args) { 
      //自動類型轉換 
      byte b=100; 
      short s=b;//byte-->short 
      System.out.println("byte-->short:"+s); 
      int i=s;  //short-->int 
      System.out.println("short-->int:"+i);       
      char c='a'; 
      i=c; 
      System.out.println("char-->int:"+i);             
      long l=i; //int--->long 
      System.out.println("int--->long:"+l);             
      float f=l; //long-->float 
      System.out.println("long-->float:"+f); 
      double d=f; //float-->double 
      System.out.println("float-->double:"+d); 
}

運行結果:


byte-->short:100 
short-->int:100 
char-->int:97 
int--->long:97 
long-->float:97.0 
float-->double:97.0

2.強制類型轉換

強制類型轉換是將取值范圍較大的類型的數值轉換成取值范圍較小的類型的數值。強制類型轉換的前提是數據類型要兼容,并且源類型的取值范圍大于目標類型。強制類型轉換可能會損失精度。強制類型轉換的語法:


(目標類型) 源類型;

源類型:取值范圍要比目標類型大,可以是值或變量。

【示例】強制類型轉換,代碼如下。


int num=(int)2.2; 
System.out.println(num);

輸出結果為2,將double型轉換成為int型,小數部分的0.2被截去,所以說強制類型轉換可能會損失精度。

int型強制轉換為byte型也會有精度損失。

【示例】強制類型轉換造成精度損失,代碼如下。


byte b; 
int i=264; 
b=(byte)i; 
System.out.println("i="+i); 
System.out.println("b="+b);

運行結果:


i=264 
b=8

int型值264強制轉換為byte型后變成了8,明顯發生了精度損失,這是為何呢?因為int型值是32位的,即4字節,整數264存儲在計算機中的二進制形式如下所示:

00000000 00000000 00000001 00001000

當強制轉換為byte型時,由于byte型只有8位(1字節),這樣264的高位的3字節全部丟棄,只剩下最低位的1字節,此時二進制形式如下:

00001000

這樣,它的值就變成8了。

int型也可強制轉換為char型,如System.out.println((char)98);將輸出b,轉換依據是ASCII編碼表。

主站蜘蛛池模板: 康保县| 台东县| 柞水县| 乃东县| 吴忠市| 额尔古纳市| 贡嘎县| 青神县| 同心县| 平遥县| 辽宁省| 叶城县| 镇原县| 汉阴县| 平凉市| 师宗县| 南江县| 沁水县| 德昌县| 虎林市| 富宁县| 镶黄旗| 清新县| 保亭| 铜梁县| 镇赉县| 广宁县| 安平县| 卫辉市| 江孜县| 贡山| 丰镇市| 怀柔区| 昆山市| 巫山县| 桂平市| 华容县| 阳西县| 武邑县| 旬邑县| 汶川县|