Quelles sont les différences dans la façon dont les types de base Java sont stockés en tant que variables locales et variables membres ?
世界只因有你
世界只因有你 2017-05-27 17:41:41
0
1
583

1. Cette question peut impliquer de nombreux aspects. Je l'ai étudiée moi-même et j'en ai compris une partie, mais certaines parties ne sont toujours pas claires. Collez d'abord le code (Java version 1.8) :

public class Test{
    int abc1 = 127;
    Integer abd1 = 127;
    Integer abf1 = 127;
    Integer abe1 = new Integer(127);
    {
        System.out.print("1\t");
        System.out.println(abc1==abd1);
        System.out.print("2\t");
        System.out.println(abd1==abe1);
        System.out.print("3\t");
        System.out.println(abc1==abe1);
        System.out.print("4\t");
        System.out.println(abd1==abf1);
    }

    int abc2 = 128;
    Integer abd2 = 128;
    Integer abf2 = 128;
    Integer abe2 = new Integer(128);
    {
        System.out.print("5\t");
        System.out.println(abc2==abd2);
        System.out.print("6\t");
        System.out.println(abd2==abe2);
        System.out.print("7\t");
        System.out.println(abc2==abe2);
        System.out.print("8\t");
        System.out.println(abd2==abf2);
    }

    public static void main(String[] args){
        Test t =new Test();
    }
/*输出为:
1       true
2       false
3       true
4       true
5       true
6       false
7       true
8       false
*/
}

2. Laissez-moi parler de la partie que je connais clairement en premier : la 4ème sortie et la 8ème sortie sont relativement claires. En effet, il existe un pool constant dans le tas Java pour stocker les littéraux de types de données de base couramment utilisés. Ce pool constant peut stocker des entiers (-128 à 127) et des types booléens (pas de types doubles). Lors de l'exécution de "Integer abd1=127", en plus de créer un objet Integer avec une valeur de 127 dans le tas, il stockera également 127 dans le pool de constantes correspondant, puis associera cet objet Integer à 127 dans le pool de constantes ; "Integer abf1=127" est exécuté à nouveau, en plus de créer l'objet, il est également associé à 127 dans le pool de constantes, donc la comparaison des deux renvoie vrai. 128 est différent. Puisqu'il dépasse la plage de stockage du pool constant, seules deux références entières i1 et i2 sont comparées, donc false est renvoyé.

3. Ma question est la suivante : comment stocker le type int (non statique, non final) dans les variables membres de l'objet. En d'autres termes, lorsqu'un objet Text t est créé, abc1 (abc2 similaire à celui-ci) est-il stocké directement sur la pile ou emballé et stocké dans le tas Pourquoi 1-3 (ou 5-7) apparaît-il ? situation vraie, fausse, vraie".

世界只因有你
世界只因有你

répondre à tous(1)
给我你的怀抱

Lorsqu'un int est comparé à un Integer, l'Integer sera automatiquement déballé et comparé à un int
La variable d'instance du deuxième objet est allouée sur le tas
1 et 5 sont comparés car le type Integer est automatiquement déballé, donc c'est vrai.
new Integer(xxx) xxx est même dans le cache De nouveaux objets seront également créés dans la portée, donc 2 est faux

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal