2016-12-07 1 views
2

Dans le code source de la classe LocalDate j'ai vu que le mois de variables d'instance privée et jour étaient short au lieu de ints.LocalDate variables privées mois et le jour à court type de données

This is the Docs of the LocalDate class.

** Une petite partie du code source **

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

Comme vous pouvez le voir à côté des variables themselve, le type de données int est utilisé pour le mois et le jour. Pourquoi faire un court alors?
Et pourquoi pas ça?

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

Répondre

2

Son tout sur le stockage . Lorsque vous créez un objet LocalDate, il alloue de l'espace dans le segment de mémoire, la taille de segment allouée est basée sur le type de variables d'instance que vous avez. Ici, puisque le mois et le jour sont déclarés comme 'short', 2 octets leur seront alloués, s'il a été déclaré comme int, il sera de 4 octets chacun.

Peu importe le type de paramètres, il sera automatiquement mis en boîte à court de int lorsque vous affectez la valeur.

+0

C'est aussi ce que je pensais, mais pourquoi n'ont-ils pas épargné plus d'espace en rendant l'année courte, le mois de l'octet, le jour court? –

+0

Cela peut être une considération de conception, c.-à-d., Lors de la programmation pour les équipements de bas niveau, la taille du mot sera de 16 bits (peut également être de 8 bits pour les dispositifs embarqués de très bas niveau). En même temps, pour la plupart des ordinateurs, il s'agit d'un mot de 32 bits. Même si c'est court, je pense que les opérations sont en 32 bits, c'est à dire. les registres auront une taille de 32 bits, le bus aura 32 bits, l'adressage sera pour un mot de 32 bits. Donc, dans le cas des ordinateurs, nous n'allons pas obtenir l'avantage de la mémoire, sauf pour les tableaux courts. –