精度損失以及不超範圍可以直接賦值byte和short
/*
java中有一個語法規則:
當這個整數型字面量沒有超出byte的取值範圍,那麼這個
整數型字面量可以直接賦值給byte型別的變數。
這種語法機制是為了方便寫程式碼,而存在的。
*/
public class 精度損失以及不超範圍可以直接賦值byte和short
{
public static void main(String[] args)
{
// 分析:以下程式碼編譯可以通過嗎?
// 300 被預設當做int型別
// b變數是byte型別
// 大容量轉換成小容量,要想編譯通過,必須使用強制型別轉換符。
// byte b = 300;
// 要想讓以上的程式編譯通過,必須加強制型別轉換符
// 雖然編譯通過了,但是可能精度損失。
// 300這個int型別對應的二進位制:00000000 00000000 00000001 00101100
// byte佔用1個位元組,砍掉前3個位元組,結果是:00101100 (44)
byte b = (byte)300;
System.out.println(b); // 44
// 這個編譯能通過嗎?
// 1是int型別,預設被當做int型別來看。
// x是byte型別,1個位元組,大容量無法直接轉換成小容量;
// 按說是編譯報錯的;
byte x = 1;
byte y = 127;
//byte z = 128;//錯誤不相容的型別:從int轉換到byte可能會有損失
// 當整數型字面量沒有chaocshort型別取值範圍的時候,該字面量可以直接賦值給short。
// 型別的變數
short s = 1;
short s1 = 32767;
// 錯誤:不相容的型別:從int轉換到short可能會有損失
//short s2 = 32768;
System.out.println(s);
}
}