java - LocalDate 私有(private)变量月和日短数据类型

标签 java localdate

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

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

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

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

最佳答案

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

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

关于java - LocalDate 私有(private)变量月和日短数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41016414/

相关文章:

java - Maven 依赖项或 Eclipse Project Facet

java - Jackson 对象映射器如何忽略 JsonProperty 注释?

java - 如何将不同的日期字符串解析为LocalDate/Year?

java - 使用 ThreeTen 在 Android 中显示日期时发生冲突

java - LocalDate Formatter 月份基数

java - Spring 5 报告

java - spring-boot-devtools 重载多模块maven项目变更

java - Camel JMS 更新 JPA 实体

java-8 - 使用 Java8 将年份字符串解析为 LocalDate