Java Primer Series (conversion de type)

introduction

Bonjour. Cet article est un article de synthèse sur la conversion de type pour «les personnes qui démarrent Java à partir de maintenant» et «les personnes qui vont vers Java après une longue période».

Il n'explique pas la programmation elle-même, comme ce que sont les variables, il peut donc ne pas convenir aux débutants.

Consultez le chapitre précédent (https://qiita.com/aoyaman/items/3922c25589dc6084451a) pour obtenir des instructions sur la façon de déclarer les variables Java et leurs types.

Les articles suivants sont en cours de préparation en tant que série d’introduction à Java.

Qu'est-ce que la conversion de type?

Vous devez spécifier le type lors de la déclaration de la variable, Il existe différents cas où la valeur de cette variable est convertie en un autre type.

Lorsque le type int est soumis à quatre règles de variables Parfois, vous voulez convertir en type long, parfois vous voulez convertir en double type,

Parfois, vous souhaitez associer un type numérique à un type de chaîne pour l'afficher à l'écran Il y a plusieurs choses.

Le terme est également connu sous le nom de conversion de type de moulage.

La manière de spécifier une conversion de type (cast) consiste à placer le nom du type entre ().

int a = 5;
double b = (int)a;

En outre, la conversion de type appelée promotion est effectuée lors de l'exécution de quatre opérations de règles. (Voir ci-dessous)

Conversion de type de base (type primitif)

Conversion du type d'octet en type int et type long Conversion du type int au type long, etc.

La valeur n'est pas perdue lors de la conversion d'une petite taille à une grande taille.

class Main {
  public static void main(String[] args) {
    byte a = 127;
    byte b = -128;
    int c = (int)a;
    int d = (int)b;
    System.out.println(c); // ->"127" est sorti
    System.out.println(d); // -> 「-128 "est sorti

    int e = 2147483647;
    int f = -2147483648;
    long g = (long)e;
    long h = (long)f;
    System.out.println(g); // ->"2147483647" est sorti
    System.out.println(h); // -> 「-2147483648 "est émis
  }
}

Inversement, lors de la conversion d'une grande taille à une petite taille, la ** valeur sera perdue **.

Quant à la façon dont il est perdu, les bits les plus élevés sont perdus en unités de bits. Dans l'exemple ci-dessous, il est exprimé en hexadécimal pour une meilleure compréhension.

class Main {
  public static void main(String[] args) {
    int a = 0x12345;
    byte b = (byte)a;
    short c = (short)a;
    System.out.printf("0x%05x\n", a); // ->"0x12345" est sorti
    System.out.printf("0x%05x\n", b); // ->"0x00045" est émis
    System.out.printf("0x%05x\n", c); // ->"0x02345" est émis
  }
}

Pour la conversion de type entre le type décimal tel que float et le type double et entier tel que int et long C'est assez compliqué, je vais donc l'omettre dans cet article (niveau d'introduction).

Conversion de type de référence (type de classe)

Quand la classe A hérite de la classe B Vous pouvez convertir de A en B et de B en A.

public class OyaClass {
  public void print() {
    System.out.println("I am OyaClass! ");
  }
}

public class ChildClass extends OyaClass {
  private String moji;
  public ChildClass(String moji) {
    this.moji = moji;
  }
  public void print() {
    System.out.println("I am ChildClass! " + moji);
  }
}

class Main {
  public static void main(String[] args) {
    ChildClass cc = new ChildClass("Yes! Yes!");
    cc.print(); // -> 「I am ChildClass! Yes! Yes!Est sortie

    OyaClass oc = cc;
    oc.print(); // -> 「I am ChildClass! Yes! Yes!Est sortie

    ChildClass cc2 = (ChildClass)oc;
    cc2.print(); // -> 「I am ChildClass! Yes! Yes!Est sortie

    OyaClass oc2 = new OyaClass();
    oc2.print(); // -> 「I am OyaClass!Est sortie

    ChildClass cc3 = (ChildClass)oc2; // ->Une exception se produit.
    cc3.print();
  }
}

Même si le type de variable est modifié comme décrit ci-dessus, l'entité (instance) sera celle créée par new. Lors de la tentative de conversion de type d'une entité créée en tant que dernière classe parente en classe enfant Je reçois une exception.

Exception in thread "main" java.lang.ClassCastException:
class OyaClass cannot be cast to class ChildClass
(OyaClass and ChildClass are in unnamed module of loader 'app')
 at Main.main(Main.java:15)

La conversion de type du type de référence (type de classe) est omise plus loin dans ce chapitre. Plus de détails seront fournis dans les chapitres «Classes abstraites» et «Interfaces».

Conversion en chaîne

Tous les types, y compris null, peuvent être convertis en type String. Il est converti en chaîne de caractères en le connectant avec une chaîne de caractères avec l'opérateur +.

class Main {
  public static void main(String[] args) {
    int a = -100;
    double b = 123.456;
    Integer c = null;
    int d = 100;

    String sa = "" + a;
    String sb = "" + b;
    String sc = "" + c;
    String sad = "" + a + d;
    String sad2 = "" + (a + d);
    System.out.println(sa);   // -> 「-100 "est sorti
    System.out.println(sb);   // -> 「123.456 "est sorti
    System.out.println(sc);   // ->"Null" est affiché
    System.out.println(sad);  // -> 「-"100100" est émis
    System.out.println(sad2); // ->"0" est émis
  }
}

Conversion qui provoque une erreur

--Conversion du type de base au type de référence (hors conversion de chaîne) --Conversion du type de référence au type de base

Des conversions telles que entraîneront une erreur. キャストコンパイルエラー.png

Promotion (promotion)

Lorsque des variables de type comme byte, short, char sont soumises à quatre règles (addition, soustraction, multiplication et division) Après avoir été converti en type int, il est soumis à quatre règles (addition, soustraction, multiplication et division).

Ce "après avoir été converti en type int" est appelé promotion.

Comme décrit ci-dessous, Pas seulement lors de la multiplication des variables de type int et de type d'octet Il est également converti en type int lorsque les variables de type d'octet et de type d'octet sont multipliées. Le type d'octet ne peut entrer que des valeurs comprises entre -128 et 127, mais les valeurs qui dépassent celles-ci sont générées.

class Main {
  public static void main(String[] args) {
    int a = 40;
    byte b = 30;
    byte c = 20;

    System.out.println(b*a); // ->"1200" est sorti
    System.out.println(b*c); // ->"600" est sorti
  }
}

Alors, que se passe-t-il si vous ajoutez la ligne suivante à la fin du programme ci-dessus?

class Main {
  public static void main(String[] args) {
    int a = 40;
    byte b = 30;
    byte c = 20;

    System.out.println(b*a); // ->"1200" est sorti
    System.out.println(b*c); // ->"600" est sorti
    byte d = b * c;
  }
}

Cela entraînera une erreur de compilation. C'est la preuve que "b * c" est converti en type int. 昇格のコンパイルエラー.png

en conclusion

Ce qui précède est l'explication de la conversion de type, mais comment était-ce?

Probablement, si vous commencez tout juste à étudier Java, je pense que ce ne sera que "Hey", Lorsque vous programmez Java, vous rencontrerez certainement une conversion de type, donc J'espère que vous vous en souviendrez à ce moment-là.

fin.

Recommended Posts

Java Primer Series (conversion de type)
Conversion de type Java
[Java] Conversion de type de date
[Java] Conversion de type de liste / type de tableau
[Java] Comparaison de la vitesse de conversion de type
Série Java Primer (variations et types)
Conversion de type de données de date Java (date, calendrier, chaîne)
[Explication facile à comprendre! ] Conversion de type de type de référence en Java
[Java ~ A propos de la définition de variable et de la conversion de type ~] Note d'étude
[Java] Type d'énumération
Java Type facultatif
Etude Java n ° 3 (conversion de type et exécution d'instruction)
Java double type
[Connaissance de base de Java] À propos de la conversion de type
Conversion de type Java 8 LocalDateTime (String, java.util.Date)
[Java] Mécanisme de calcul, opérateurs et conversion de type
Conversion de type du type java Big Decimal au type String
[Introduction à Java] À propos de la conversion de type (distribution, promotion)
[Java] Type de données ①-Type de base
Conversion de type Uri → String, String → Uri
Champ de type de classe Java
Détermination de type en Java
Conversion Endian avec JAVA
Mémo d'apprentissage Java (type de données)
Essayez le type fonctionnel en Java! ①
[Java Bronze] Mémo d'apprentissage (interface, méthode statique, conversion de type, etc.)
Etude de Java # 7 (Type de syntaxe de branche)
[Java] Type de données / produit matriciel (produit matriciel AOJ ⑧)
java (utilisez le type de classe pour le champ)
Restez coincé dans un Java Primer
[Java] Comparaison correcte du type String
[Java] Conversion d'un tableau à une liste
Liste de conversion mutuelle de tableau / liste / flux Java
Conversion de liste Java8 avec Stream map
Comment utiliser le type enum Java
Revue Java ② (calcul, séquence d'échappement, règle d'évaluation, conversion de type, instruction d'exécution d'instruction)