標籤:算數 bool 整數 main aot equals print static 關於
java有8中資料類型:
| 資料類型 |
大小 |
表示的範圍 |
| boolean |
1位元組或4位元組 |
0或1 |
| byte |
1位元組 |
-128~127 |
| short |
2位元組 |
-32768~32767 |
| char |
2位元組 |
Unicode0~Unicode2^16-1 |
| int |
4位元組 |
-2^31~2^31-1 |
| long |
8位元組 |
-2^63~2^63-1 |
| float |
4位元組 |
|
| double |
8位元組 |
|
關於float和double的範圍和精度問題可以參看這篇文章以及這篇文章
為什麼boolean的長度既可以是1位元組也可以是4位元組呢?
理由來源是《Java虛擬機器規範》一書中的描述:“雖然定義了boolean這種資料類型,但是只對它提供了非常有限的支援。在Java虛擬機器中沒有任何供boolean值專用的位元組碼指令,Java語言運算式所操作的boolean值,在編譯之後都使用Java虛擬機器中的int資料類型來代替,而boolean數組將會被編碼成Java虛擬機器的byte數組,每個元素boolean元素佔8位”。這樣我們可以得出boolean類型佔了單獨使用是4個位元組,在數組中又是1個位元組。
資料類型的轉換:
8種資料類型,我們可以將它們分為3個大類別:整數,浮點數和布爾值。
整數有5種,它們都是按照補碼來編碼的,分別是byte、short、char、int、long五種類型。
浮點數有兩種,float和double。
布爾值就只有boolean一種了。
同一大類別之間的轉換規則其實很簡單。範圍小的可以自動轉換為範圍大。範圍的大小肯定是資料類型的位元有關了。範圍最小的肯定是byte,範圍最大的是long。所以把byte轉化成long,那是一點問題都沒有。可以直接用等號串連起來,也叫做隱式轉換。如果你想將範圍大的轉換為範圍小的,則必須強轉。
下面寫代碼舉例:
public class Main{ public static void main(String[] args) { byte b1 = 100; short s1= 200; int i1 = 300; long l1 = 400L; char ch = ‘a‘; i1 = b1; b1 = (byte) i1; l1 = i1; i1 = (int) l1; s1 = (short) ch; ch = (char) s1; i1 = ch; ch = (char) (i1+1); System.out.println(i1);//輸出97 System.out.println(ch);//輸出b System.out.println(ch+0);//輸出98 }}
int的是java預設的運算資料類型,定義long類型時資料後面加L。
因為java的運算都是int類型的,所以:
char a= ‘a‘;
char b= a+1;
編譯報錯,必須這樣寫:char b= (char)(a+1);
public class Main{ public static void main(String[] args) { int i1 = 300; long l1 = 400L; float f1 = 23.7f; double d1 = 28.99; f1 = i1; i1 = (int) f1; f1 = l1; l1 = (long) f1; }}
雖然float和int都是4位元組,但是float表示的範圍更大,更廣,所以int到float可以,float到int必須強轉,甚至long到flaot都是強轉。
不知道大家有沒有這樣的疑問?
int i=1;
flaot f1=1f;
float f2 = 1.0f;
這三個數是否相等呢?
public class Main{ public static void main(String[] args) { int i=1; long l = 1; float f1=1f; float f2 = 1.0f; double d1 = 1; double d2 = 1.0; //以下輸出全為true System.out.println(i==f1); System.out.println(i==f2); System.out.println(l==f1); System.out.println(l==f2); System.out.println(f1==f2); System.out.println(i==d1); System.out.println(i==d2); System.out.println(f1==d1); System.out.println(f1==d2); }}
補充一點:
public class Main{ public static void main(String[] args) { String s= "1"; char ch = ‘1‘; System.out.println(s.equals(ch)); //以下語句報異常,不可將對象和基礎資料型別 (Elementary Data Type)用==比較 System.out.println(s==ch); }}
char和String是沒有可比性了,不可能相等的。當我們去看String的equals()方法原碼時,方法的參數雖然是Object但是,方法內部會判斷Object instanceof String。
Java基礎資料型別 (Elementary Data Type)