內存地址是連續有序的。計算機存儲數據與內存尋址是以字節爲單位的。java
當存儲byte類型時,須要一個字節的內存,存儲與讀取無異議。編碼
但當存儲char(java 使用uniconde編碼,1個字符佔兩個字節)、short,int等類型,須要多個字節內存空間,怎麼存儲呢?低位置的第一個字節,是存儲數據的低位(小端模式),仍是存儲數據的高位(大端模式)呢。spa
例如一個16bit的short型,值爲0x1122,那麼0x11爲數據的高位,0x22爲數據的低位。其在內存中的地址爲0x0010(即佔用0x0010,0x0011兩個字節),對於大端模式,就將0x11(數據高位)放在低地址中,即0x0010中,0x22(數據低位)放在高地址中,即0x0011中。小端模式,恰好相反。code
若是把內存看做是從右向左的,地址依次增大;數據左邊爲高位,右邊爲低位,也是從右向左依次增大,若是存儲順序一致,則是小端;相反,則是大端。內存
public class _01_判斷大端小端 { public static void main(String[] args) { if (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN) { System.out.println("BIG_ENDIAN"); } else { System.out.println("LITTLE_ENDIAN"); } //誤解: int i = 1; byte b = (byte)i;// 並不能判斷大小端,由於向下的類型轉換時,保留的是a值的低字節部分,而不是內存中數據的低地址字節部分 System.out.println(b); if(b == 1) System.out.println("LITTLE_ENDIAN"); else System.out.println("BIG_ENDIAN"); System.out.println(i&0xff); } }