1. 程式人生 > 其它 >Java重溫學習筆記一,基本資料型別

Java重溫學習筆記一,基本資料型別

一、 float/double型別對字尾大小寫不敏感。如:

float f1 = 234.5f;
float f2 = 234.5F;

效果等同。

double d1 = 7.;
double d2 = 7.d;
double d3 = 7.0D;

效果等同。

二、long型別,如果賦值時資料過大,必須加字尾L(建議養成習慣)。不加字尾預設按整型處理,易報錯。

如:

long g1 = 9223372036854775807;
long g2 = (long)9223372036854775807;

編譯時都會報錯:錯誤: 過大的整數: 9223372036854775807

正確方式為:

long
g1 = 9223372036854775807L; long g2 = 9223372036854775807l;

三、IntegerCache快取的問題

    public static void main(String[] myarg) {
        Integer i1 = 5678;
        Integer i2 = 5678;
        
        System.out.println(i1==i2);
    
        Integer i3 = 101;
        Integer i4 = 101;
        
        System.out.println(i3
==i4); }

上面這段程式碼的輸出是:

false
true

原因參考IntegerCache類的實現程式碼:

public static Integer valueOf(int i) {
    assert IntegerCache.high >= 127;
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

從上面可以看出,i >= -128 && i <= 127 時,Integer.valueOf(i) 會將 i 儲存在內部類 IntegerCache的static final Integer cache[]裡,這一位元組的快取記憶體地址是靜態的。

四、char與byte的區別

byte 是位元組資料型別,是有符號型的,佔1 個位元組,大小範圍為:-128—127 。char 是字元資料型別 是無符號型的,佔2位元組(Unicode碼 ),大小範圍 為:0—65535。char是一個16位二進位制的Unicode字元,Java用char來表示一個字元 。

    public static void main(String[] myarg) {
        char c1 = (char) -9; // char不能識別負數,必須強制轉換,否則報錯。
        System.out.println(c1); // 注意:即使強制轉換之後,也無法識別,顯示為?號。
        
        char c2 = 'B';
        char c3 = '民';
        byte b1 = (byte)c2;    // 必須強制轉換否則報錯
        byte b2 = (byte)c3;    // 必須強制轉換否則報錯
        System.out.println(b1);
        System.out.println(b2);
    }

順帶補充八種基本資料型別的基本知識:

byte 資料型別是8位、有符號的,以二進位制補碼錶示的整數;

short 資料型別是 16 位、有符號的以二進位制補碼錶示的整數

int 資料型別是32位、有符號的以二進位制補碼錶示的整數;

long 資料型別是 64 位、有符號的以二進位制補碼錶示的整數;

float 資料型別是單精度、32位、符合IEEE 754標準的浮點數;

double 資料型別是雙精度、64 位、符合IEEE 754標準的浮點數;

boolean資料型別表示一位的資訊;

char型別是一個單一的 16 位 Unicode 字元;