Maison  >  Questions et réponses  >  le corps du texte

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 ?

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".

世界只因有你世界只因有你2702 Il y a quelques jours541

répondre à tous(1)je répondrai

  • 给我你的怀抱

    给我你的怀抱2017-05-27 17:43:41

    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

    .

    répondre
    0
  • Annulerrépondre