可能我們只是留意了乙個int代表的是整數,占用了4個位元組,而float可以代表小數,而double呢,好吧,能代表更精確的小數,那到底有多精確呢(「如果,你感覺你的程式對精確度要求很高,那麼你可以使用double」,我們往往也都是那麼一說)
primitive型別之間的轉換?
好的,乙個int占用4個位元組,而乙個byte占用了1個位元組
當int轉到byte,低位的8傳給byte
而byte轉到int呢,因為byte佔1個,而int佔4個,那麼直接將數值賦過去就行了,然後,高位補0
請注意上面的一句話,沒錯,那是錯誤的,它也是所有夢魘的開端
如果你還認為是的對,那麼你可以看看下面的實驗
實驗1:
byte a = (byte) 0xf0;
int b = a;
system.out.println(integer.tobinarystring(b));
你將會看到:11111111111111111111111111110000,一共32個數字
實驗2:
byte a = (byte) 0x0f;
int b = a;
system.out.println(integer.tobinarystring(b));
system.out.println(integer.tobinarystring(b).length());
你將會看到:1111,一共4個數字(為什麼不是32,因為:前面都是0,不給你展示了)
那麼,我們得出了乙個結論:
byte到int轉換時,
如果byte的最左邊的數字是0,那麼轉換後的int的左端全是0,
否則,全是1
上述結論也適應於其他 小型別 轉換到 大型別
我們在大學的時候就學過了,其中還學到什麼補碼等東東
你容易忽視的乙個例子:
我有兩個byte,分別是a和b,我想將它們相加,然後賦予給另外乙個byte c
你可能會寫:byte c = a + b;
然後eclipse告訴你:type mismatch: cannot convert from int to byte
則:兩個byte數相加後變成了乙個int?是:a和b分別轉成int,然後是兩個int相加
java中的型別轉換
基本型別和抽象型別的型別轉換是不同的,基本型別的轉換會改變記憶體中的資料 抽象型別並不對物件本身做更改,而是改變可見性。這是由系統自動完成的型別轉換,由jvm自動完成。轉換規則是對型別進行提公升,也可以說是從儲存範圍小的型別轉換到到儲存範圍大的型別 byte short char int long ...
java中的型別轉換
基本資料型別分為boolean和數值型別,如下圖依次需要注意的是 boolean型別的預設值是false,char除了可以定義數字,乙個以用來定義乙個字元,如 char a 王 乙個位元組表示八位,byte,short,int,long 都是有數值符號,其中float 定義時 需要注意 float ...
JAVA中int String的型別轉換
int string int i 12345 string s 第一種方法 s i 第二種方法 s string.valueof i 這兩種方法有什麼區別呢?作用是不是一樣的呢?是不是在任何下都能互換呢?string int s 12345 int i 第一種方法 i integer.parsein...