Maison > Java > javaDidacticiel > Exemples et analyse du mécanisme de conversion de type automatique en Java

Exemples et analyse du mécanisme de conversion de type automatique en Java

WBOY
Libérer: 2023-04-21 11:13:16
avant
1753 Les gens l'ont consulté

Analyse du mécanisme de conversion de type automatique

Vue d'ensemble

  • La conversion de type automatique est également appelée conversion de type implicite

  • Le type de données de l'expression est automatiquement promu

Toutes les valeurs d'octets, de courts et de caractères sera promu pour taper int.

Si un opérande est de type long, le résultat calculé est de type long ;

Si un opérande est de type float, le résultat calculé est de type float

Si un opérande est de type double ; de type double.

Le type de données sera uniquement automatiquement augmenté, pas automatiquement diminué

La valeur int peut être attribuée à des variables de type long, float, double, mais ne peut pas être attribuée à des variables de type byte, short, char

Exemples et analyse du mécanisme de conversion de type automatique en Java

La même chose est vrai pour les paramètres de fonction

Exemples et analyse du mécanisme de conversion de type automatique en Java

Bien sûr, en cas de surcharge de fonction, le compilateur Java sélectionnera automatiquement la fonction la plus correspondante à appeler

Exemples et analyse du mécanisme de conversion de type automatique en Java

Le type de données par défaut des entiers en Java est le type int

Tous ceux avec une longueur inférieure à int Le résultat du type (byte, short, char) sera promu au type int après l'opération

Exemples et analyse du mécanisme de conversion de type automatique en Java

Bien sûr, il y a la situation suivante, cette situation est due au fait que lorsque nous effectuons l'opération. Opération d'affectation, le compilateur Java peut clairement savoir si le résultat de l'opération dépasse la plage de valeurs de byte ou short, donc l'octet a = 1 + 1 ne signale pas d'erreur. La raison de l'erreur de compilation dans l'octet ci-dessus c = a + b; est que a et b sont tous deux des variables. Le compilateur ne sait pas si le résultat ajouté dépassera la plage de valeurs de l'octet, il promeut donc le résultat en int. taper. .

Exemples et analyse du mécanisme de conversion de type automatique en Java

Pour résumer :

  • Lorsque le compilateur sait clairement que le résultat de l'opération entière n'atteint pas la plage de représentation de int, le résultat de l'opération de type byte, short ou char ne sera pas automatiquement promu en int type

  • Lorsque le compilateur sait clairement ou ne sait pas si le résultat de l'opération entière atteint la plage de représentation de int, le compilateur convertira automatiquement le résultat de l'opération en int, même s'il est à l'origine de type byte, short ou char.

Conversion de type automatique et conversion de type forcée

Quand la conversion de type aura-t-elle lieu ?

Réponse : lors de l'opération d'affectation, la conversion de type se produira lorsque les types de données des deux côtés sont incohérents

Comme suit :

public class TypeTest {
    public static void main(String[] args){
       	// 运算时发生的隐式类型转换,两整数相除得到的还是一个整数
        byte a  = 3;
        byte b = 4;
        int num  =  a + b;
        System.out.println(num); // 7
        // 赋值时发生的隐式类型转换
        int ch = '0';
        System.out.println(ch); // 48
        // 运算时发生的强制类型转换
        byte a1 = 12;
        byte a2 = 12;
        byte num1 = (byte)(a1  + a2);
        System.out.println(num1); // 24
        // 赋值时发生的强制类型转换
        short b3 = 1234;
        byte a3 = (byte) b3;
        System.out.println(a3); // -46
    }
}
Copier après la connexion

En cours d'exécution capture d'écran :

Exemples et analyse du mécanisme de conversion de type automatique en Java

Classification de conversion de type

  • Conversion de type automatique

  • Conversion de type forcée

Conversion de type automatique (conversion de type implicite)

Règle : De petit à grand, octet faible en high byte Promotion automatique de

commande :

byte (1 octet) > short (2 octets) -- > (4 octets) > double(8 octets)

char (2 octets)-- > ; double (8 octets)

Analyse du dessin :

Exemples et analyse du mécanisme de conversion de type automatique en Java

Affichage du code :

public class TypeDemo {
    public static void main(String[] agrs){
        // byte -- > short
        byte b1 = 127;
        short s1 = b1;
        System.out.println(s1); // 127
        // short -- > int 
        short  s2 = 30000;
        int i = s2;
        System.out.println(i); // 30000
        // int  -- > long
        int num = 2100000000;
        long lg = num;
        System.out.println(num); // 2100000000
        // long -- > float 
        long lg1 = 200000000000000L;
 	    float f1 = lg1;
        System.out.println(f1);// 2.00000001E14
        // float -- > double 
        float f2 = 3.14f;
        double d1 = f2;
 	    System.out.println(d1); // 3.140000104904175
        // char -- > int
	    char ch = 'a';
        int i1 = ch ;
        System.out.println(i1); // 97
        // char -- > long
        char ch2 = 'b';
        long lg2 = ch2;
        System.out.println(lg2); // 98
        // char  -- >  double
        char ch3 = 'c';
        double dou = ch3;
        System.out.println(dou); // 99.0
        // char -- > float
        char ch4 = 'd';
        float  f3 = ch4;
        System.out.println(f3); // 100.0
    }
}
Copier après la connexion

Capture d'écran en cours d'exécution :

Exemples et analyse du mécanisme de conversion de type automatique en Java

Remarque :

l'octet et le short ne peuvent pas être convertis vers et depuis un caractère

Affichage du code :

public class TypeDemo2 {
    public static void main(String[] agrs){
 	    // byte -- > char
        byte bt = 127;
        char ch = bt;
        System.out.println(ch);
        // short -- > char
        short sh = 12;
        char ch2 = sh;
        System.out.println(ch2);
    }
}
Copier après la connexion

Capture d'écran d'erreur de compilation :

Exemples et analyse du mécanisme de conversion de type automatique en Java

Bien que float fasse 4 octets, float représente une plage de données plus grande que long. Cela montre que la taille de la plage de données et la taille des octets ne sont pas nécessairement liées.

Affichage du code :

public class TypeDemo3 {
    public static void main(String[] agrs){
        long lg = 20000000000000L;
        float f1 = lg;
        System.out.println(f1); // 1.99999997E13
    }
}
Copier après la connexion

Capture d'écran en cours d'exécution :

Exemples et analyse du mécanisme de conversion de type automatique en Java

Le type booléen ne peut pas participer à la conversion de type

Affichage du code :

public class TypeDemo4 {
    public static void main(String[] agrs) {
        boolean flag = 12;
        int flag1 = flag;
        System.out.println(flag1);
    }
}
Copier après la connexion

Capture d'écran d'erreur de compilation :

Exemples et analyse du mécanisme de conversion de type automatique en Java

Coercition (conversion de type explicite)

Règle : De grand à petit, coercition manuelle d'octets de poids élevé à d'octets de poids faible

Ordre :

double(8字节) – > float(4字节) – > long(8字节) – > int(4字节) – > short (2字节)-- > byte(1字节)

double(8字节) – > float(4字节) – > long(8字节) – > int(4字节) – > char(2字节)

画图分析:

Exemples et analyse du mécanisme de conversion de type automatique en Java

(掌握)格式:目标数据类型 变量名 = (目标数据类型) 变量 | 常量;

代码展示:

public class TypeDemo5 {
    public static void main(String[] agrs){
        // float -- > long
        // final float  PI = 3.14f;
        // long num = (long) PI; // 3
        // float little =  3.14f;
        // long num = (long)little; // 3
 	    long num = (long)3.14f;      
        System.out.println(num);// 3 
        // double -- > float 
        // double dou = 3.14;
        // float little1 = (float)dou; // 3.14
        //  float little1 = (float) 3.14d;  // 3.14
        final double  dou = 3.14;
        float little1 = (float)dou;
        System.out.println(little1); // 3.14
        // long -- > int 
        // long  num1 = 2000000000000L;
        // int   num2 = (int)num1;  // -1454759936
        // int num2 = (int)2000000000000L; // -1454759936
       	final  long num1 = 2000000000000L;
        int num2 = (int)num1;
        System.out.println(num2);  // -1454759936
        // int --> short
        // int  num3  = 12;
        // short num4 = (short)num3; // 12
        // short num4 = (short)40000; // -25536
        final int num3 = 60;
        short num4 = (short)num3;
        System.out.println(num4); // 60
        // short -- > byte
        final short sh = 12345;
        byte bt = (byte)sh;
        System.out.println(bt); // 57
        short sh2 = 78;
	    bt = (byte) sh2;
        System.out.println(bt); // 78
    }
}
Copier après la connexion

运行截图:

Exemples et analyse du mécanisme de conversion de type automatique en Java

注意:

强制类型转换有数据丢失,一般不建议使用

代码展示:

public  class TypeDemo6 {
   public static void main(String[] agrs) {
       short a = 1245;
       byte b = (byte)a;
       System.out.println(b);
   } 
}
Copier après la connexion

运行截图:

Exemples et analyse du mécanisme de conversion de type automatique en 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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal