byte tt=(byte)130 等於 -126 。 byte 占一個位元組,8bit 。第一位是符號位,0 表示正數,1 表示負數。因此byte 的取值範圍 [-128, 127] 。 130的二進位是00000000000000000000000010000010,截取成byte類型只保留後8位 ...
byte tt=(byte)130 等於 -126 。 byte 占一個位元組,8bit 。第一位是符號位,0 表示正數,1 表示負數。因此byte 的取值範圍 [-128, 127] 。
130的二進位是00000000000000000000000010000010,截取成byte類型只保留後8位,也就是10000010,第1位是符號位0代表正數、1代表負數,這裡第一位是1也就是負數,電腦存儲的負數是補碼,必須將其他位取反再加1,取反加1後這個為-1111110,這個二進位數轉換為整數是-126 。
byte a= (byte) 0x00000111; 十六進位 16*16 + 16 + 1 = 256 + 17 = 0000001 00010001 。截取後8位,則 a = 17 。
byte c = (byte)0xFF; 十六進位 15*16 + 15 = 255 = 11111111 , 最前面1表示負數, 存儲的是 補碼,後面7位取反 加 1 等於 1 , 則 c = -1 。 System.out.println(c); 輸入 -1 。
八進位必須以 0 開頭, 十進位不能以0開頭(0除外)。
byte a= 00000111; 八進位 64 + 8 + 1 , 則 a = 73 。
byte a= (byte)00001111; 八進位 8*8*8 + 64 + 8 + 1 = 00000010 01001001 , 轉換成byte,取後8位,則 a = 73 。 byte a= 00001111 ,會報錯超出範圍[-128,127] 。
byte占 8位。 short 占 16位,取值範圍 [-32768, 32767]
short s1 = 1; s1 = s1 + 1; 會報錯,因為1是int類型,計算結果是 int類型,需要強制轉換成short類型,寫成 s1 = (short)(s1 + 1) ; 或者 s1 += 1; 此種寫法含有隱式的強制類型轉換。 相當於(short)(s1 + 1)
int類型在記憶體中占32位,4個位元組。取值範圍 [-2147483648, 2147483647]。
2^31 = 2147483648
Integer a = 3;
Integer b = 3;
System.out.println(a == b); // true 。
創建b 的時候,會先去已創建的對象里尋找是否有相同的值,有的話就使用地址,由於b的值和a的值是相同的,所以b是直接引用a 。如果 再執行 a = 4 ; 則會另創建一個值為4的對象,並把 a 指向 該對象。但是b 的指向不變。
Integer c = new Integer(3);
Integer d = new Integer(3);
System.out.println(a == c); //false 。
System.out.println(d == c); //false 。
另外創建兩個 值為 3的對象 c 和 d,和a 不同的地址。
int e = 3;
System.out.println(a == e); //true
a 會自動開箱,並用其值與 e 比較。相等。
System.out.println(d == e); //true
Integer f = Integer.valueOf(3);
System.out.println(a == f); //true
Integer.valueOf(3) 返回一個 Integer 的對象,如果之前有此對象,則 f 也指向這個對象。
System.out.println(c == f); //false 。
System.out.println(e == f); //true, 自動開箱後比較。
int a = Integer.parseInt("634"); parseInt() 是 Integer類的靜態方法,返回一個 int 的值 。參數必須是字元串。 a =634 。
int r = Integer.parseInt("s"); 會在運行時報錯:NumberFormatException
Integer k = Integer.valueOf("634"); 返回值是 634 的Integer 對象。
Integer k = Integer.valueOf("a"); 會在運行時報錯:NumberFormatException
int a = Integer.parseInt("634" , 8); 第二個參數表示進位, 把第一個參數轉換成十進位的整數值,比如把 8進位的 634 轉化成 6*8*8 + 3*8 + 4 = 412 。
long型如果賦值超出int型的範圍,則需要在數字後加上L或l 。表示該值是長整型。long占64位。
long n = 2147483650L + 4; 則 n 值是 2147483654 。
long m = (long)(2147483647 + 4); 計算過程:2147483647 存儲是: 01111111 11111111 11111111 11111111 加上 00000000 00000000 00000000 00000100 等於 10000000 00000000 00000000 00000011 。
前面的1 表示負數。負數存儲的是補碼,將其他位取反加 1 。 源碼是 11111111 11111111 11111111 11111101 。 則 m 等於 -(2^32-1-2)= -2147483645 。
float 占32位。申明float 變數必須在小數後面加F 或 f 。
double占64位。預設小數是 double 。也可以在後面加D 或 d 。