2016-12-07 92 views
2

在類LOCALDATE的源代碼,我看到的是,私有實例變量的月和日是短褲,而不是整數LOCALDATE的私有變量的月和日短數據類型

This is the Docs of the LocalDate class.

**的源代碼**

private final int year; 
private final short month; 
private final short day; 

private LocalDate(int year, int month, int dayOfMonth) { 
    this.year = year; 
    this.month = (short) month; 
    this.day = (short) dayOfMonth; 
} 

public int getDayOfYear() { 
    return getMonth().firstDayOfYear(isLeapYear()) + day - 1; 
} 

public int getMonthValue() { 
    return month; 
} 

public int getDayOfMonth() { 
    return day; 
} 

,你可以在旁邊的變量看themselve,int數據類型用於月,日的一個簡短的一部分。那爲什麼把它縮短呢?
爲什麼不呢?

private final short year; 
private final byte month; 
private final byte day; 

回答

2

其全部關於存儲。當你創建一個LocalDate的對象時,它會在堆中分配一些空間,分配的堆的大小是基於你擁有的實例變量的類型。在這裏,由於月份和日期被聲明爲'short',因此將爲它們分配2個字節,如果它被聲明爲int,則每個字節將爲4個字節。

參數的類型無關緊要,當你賦值時它會被自動裝箱到短的int值。

+0

這也是我的想法,但他們爲什麼不通過將年份,字節月,短日期縮短來節省更多空間? –

+0

可能是一個設計考慮因素,即對低級設備進行編程時,字大小將爲16位(對於非常低級別的嵌入式設備也可能爲8位)。對於大多數計算機來說,它是32位字的大小。即使它短暫,我認爲操作是在32位,即。寄存器將是32位大小,總線將是32位,尋址將是32位字。 所以在計算機的情況下,除了短陣外,我們不會獲得內存優勢。 –