Maison  >  Article  >  Java  >  La différence entre int et entier en Java

La différence entre int et entier en Java

王林
王林avant
2019-11-30 17:24:422835parcourir

La différence entre int et entier en Java

1. Types de données de base Java et leurs classes d'encapsulation

La différence entre int et entier en Java

java Les types de données incluent les types de données de base et les types de données de référence. Afin de faciliter le traitement des types de données de base en tant qu'objets, Java introduit des classes d'encapsulation correspondant aux types de données de base. Par exemple, la classe d'encapsulation int est Integer.

Partage de vidéos d'enseignement en ligne : Vidéo d'enseignement Java

2. Déballage et emballage automatiques de Java

1. . Boxing automatique

Le boxing automatique consiste en fait à convertir les types de données de base en types de données de référence (objets)

2. Déballage automatique

Déballage automatique. convertit en fait les types de données de référence en types de données de base

Le code est le suivant :

    public static void main(String[] args) {
        Integer a = 1;//这里就用到了自动装箱;等同于Integer a = new Integer(1);

        int b = a - 1;//对象不能直接进行计算,所以这里有自动拆箱的操作,将a对象转换成基本数据类型,然后-1
        System.out.println(a);
        System.out.println(b);
    }

Résultat d'impression :

1
0

3 La différence entre int et Interger.

De ce qui précède, nous pouvons voir la différence entre int et Interger :

int est le type de données de base et Integer est le type de données de référence

Le la valeur par défaut de int est 0 et la valeur par défaut de Integer est nulle

Le type int stocke les valeurs directement, et Integer doit instancier l'objet et pointer vers l'adresse de l'objet.

En parlant de ça, pensez-vous que c'est ça ? En fait, il y a quelques différences détaillées entre eux : comme suit

    public static void main(String[] args) {
        Integer a = new Integer(1);
        Integer b = new Integer(1);

        int c = 1;
        int d = 1;

        Integer e = 1;
        Integer f = 1;
        
        Integer g = 130;
        Integer h = 130;
        
        Integer i = new Integer(130);
        int j = 130;
    }

1 : a == b ? Un non-sens, certainement pas égal. Les adresses des deux nouveaux objets sont différentes.

2 : c == d ? C'est également un non-sens, les valeurs des types de données de base doivent être égales.

3 : La question clé maintenant est e == f ? g == h?

La réponse est : e == f != h;

Pourquoi cela arrive-t-il ? Parce que Integer g = 130 sera compilé dans Integer.valueOf(130) lorsque ava sera compilé. Cela peut être vu en décompilant le fichier de classe. On peut conclure du code source d'Integer que la méthode Integer.valueOf() mettra en cache l'entier entre les valeurs -128~127 et n'en créera pas un nouveau, donc e==f lorsque la valeur deux est ; supérieur à 127 ou inférieur à - À 128, un nouveau sera créé, donc g != h.

La méthode valueOf de Integer est la suivante :

    public static Integer valueOf(int i) {
         //IntegerCache.low == -128  ;IntegerCache.high == 127
         //当数值大于-128小于127时,进行缓存;否则重新new一个。
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

4 : Est-ce que c == e, est-ce que i == j ?

Les réponses sont toutes égales. Parce que lors de la comparaison des classes encapsulées avec les types de données de base, Java les déballera automatiquement, puis comparera si les valeurs sont égales.

Résumé :

1. Ce sont toutes des classes encapsulées et sont toutes dérivées de nouvelles, elles ne sont donc certainement pas égales. Parce que les adresses mémoire des objets sont différentes.

2. Ce sont toutes des classes encapsulées, et elles ne sont pas nouvelles. Si la valeur est comprise entre -128 et 127, elle est égale, sinon elle n'est pas égale.

3. Si la classe du package et le type de base sont comparés, tant que les valeurs​​sont égales, elles sont égales, sinon elles ne sont pas égales. Parce qu'il y aura une opération de déballage automatique lors de la comparaison de la classe encapsulée avec le type de données de base.

4. Ce sont tous des types de données de base. Si les valeurs​​sont égales, sinon, elles ne sont pas égales.

Pour plus de didacticiels connexes, veuillez consulter : Démarrer avec Java

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer