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.
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 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).
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».
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 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.
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.
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