LocalDate 私有变量月日短数据类型

问题描述 投票:0回答:1

LocalDate类的源代码中,我看到私有实例变量month和day是shorts而不是ints

这是 LocalDate 类的文档。

** 一小部分源代码 **

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;
}

正如您在变量本身旁边看到的,int 数据类型用于月份和日期。那为什么要剪短呢?
为什么不是这个呢?

private final short year;
private final byte month;
private final byte day;
java localdate
1个回答
3
投票

一切都与存储有关。当您创建 LocalDate 对象时,它会在堆中分配一些空间,分配的堆大小基于您拥有的实例变量的类型。这里,由于月份和日期被声明为 'short',因此将为它们分配 2 个字节,如果它被声明为 int ,则每个字节将是 4 个字节。

无论参数类型如何,赋值时都会自动将 int 装箱为 Short。

© www.soinside.com 2019 - 2024. All rights reserved.