1. 程式人生 > >java基本資料型別自動轉換規則

java基本資料型別自動轉換規則

一、java基本資料型別

Java提供了八種基本型別,其中包括六種數字型別(四個整數型,兩個浮點型),一種字元型別和一種布林型。 
整型: short, int, long, byte; 
浮點型:float, double; 
字元型:char; 
布林型:boolean. 
Java中的數值型別不存在無符號的,它們的取值範圍是固定的,不會隨著機器硬體環境或作業系統的改變而改變。


二、非賦值運算,自動轉換規則

1)布林型不參與轉換

2)規則: byte/char/short -> int ->  long -> float -> double

2.1)例子:

public class Test {
	public static void main(String[] args) {
		short a = 1;
		byte b = 2;
		char c = 3;
		
		//三個輸出都是 class java.lang.Integer
		System.out.println(getType(b+a));
		
		System.out.println(getType(b+c));
		
		System.out.println(getType(a+c));
		
	}
	
	public static String getType(Object o){
		return o.getClass().toString();
		}
}
2.2)規則具體講解

(2.2.1)如運算元之一為double,則另一個運算元先被轉化為double,再參與算術運算。 
(2.2.2)如兩運算元均不為double,當運算元之一為float,則另一運算元先被轉換為float,再參與運算。 
(2.2.3)如兩運算元均不為double或float,當運算元之一為long,、則另一運算元先被轉換為long,再參與算術運算。 
(2.2.4)如兩運算元均不為double、float或long,則兩運算元先被轉換為int,再參與運算。 

3)對比一下C語言



三、賦值運算,自動轉換規則

將小範圍型別變數轉換成大範圍型別的變數。Java會自動擴寬型別

看上面那張圖,各個基本資料型別的取值範圍都有了,如果一個取值範圍包括了另一個的,那麼賦值時,小的可以自動轉換成大的

例子:     long d = 333;   float e = d; //可以

short a = 1; char b = a; //不行,因為取值範圍不是包含,而是交叉

int a = 1; byte b = a; //不行,大的轉成小的,要強制型別轉換,byte b = (byte) a;

四、一些值得注意的地方

當運算子為取正運算子(+)。取負運算子(-)或按位取反運算子(~)時,如果運算元為byte、char或short,則先被轉換為int,再參與運算