Für diejenigen, die gerade angefangen haben, Programmieren einschließlich der Java-Sprache zu lernen, und diejenigen, die es bereits gelernt haben, zur Überprüfung Ich schreibe, um die Typkonvertierung zu lernen.
Letztes Mal habe ich etwas über [Variationen und Typen] gelernt (https://qiita.com/morioheisei/items/3d27e82d6cd88068dded). Diesmal über ** Typkonvertierung **.
Es dient zur Konvertierung des Datentyps. Hier erfahren Sie, wie es geht.
-Implizite Typkonvertierung ・ Typumwandlung nach Besetzung
Schauen wir uns jeden an.
Es ist möglich, einen großen Typ durch einen kleinen Typ zu ersetzen. Selbst wenn wir Programmierer den Typ nicht explizit konvertieren, wird er beim Kompilieren konvertiert.
Die Ersetzung vom linken zum rechten Typ ist in Ordnung! byte → short、char → int → long → float → double
Main.java
class Main {
public static void main(String args[]) {
int number = 10;
//Die Typnummer int wird zum Typ float
float numberFloat = number;
System.out.println(numberFloat); // 10.0 ← mit einem Dezimalpunkt
}
}
** Bitte beachten Sie, dass eine implizite Typkonvertierung für Folgendes nicht möglich ist. ** ** ** ・ Wenn Sie den Zeichentyp in den Kurztyp ändern ・ Wenn Sie den Kurztyp in den Zeichentyp ändern Beide sind 16-Bit-Datentypen, aber der Wertebereich, der verarbeitet werden kann, ist unterschiedlich. Sie müssen die Typkonvertierung durch Casting durchführen, wie unten beschrieben.
Main.java
class Main {
public static void main(String args[]) {
//・ Char → kurz
char a = 100;
//Ich bekomme eine Fehlermeldung
// short b = a; // Type mismatch: cannot convert from char to short
short b = (short) a; //Konvertierung in kurze Typ-für-Typ-Konvertierung durch Besetzung
System.out.println(b); // 100
//・ Kurz → char
short c = 100;
//Ich bekomme eine Fehlermeldung
// char d = c; // Type mismatch: cannot convert from short to char
char d = (char) c; //Konvertierung in char Typ für Typ Konvertierung durch Besetzung
System.out.println(d); // d
}
}
-Es ist unmöglich, einen kleinen Typ durch einen großen Typ zu ersetzen. Ein Kompilierungsfehler wird auftreten. Die Substitution vom rechten zum linken Typ ist NG! byte → short、char → int → long → float → double
Main.java
class Main {
public static void main(String args[]) {
int numberInt = 10;
//Sie können keinen großen Typ einem kleinen Typ zuweisen.
byte numberByte = numberInt; // Type mismatch: cannot convert from int to byte
System.out.println(numberByte);
}
}
Beachten Sie außerdem, dass aufgrund der folgenden Typkonvertierungen ** die Gefahr eines Genauigkeitsverlusts besteht.
Main.java
class Main {
public static void main(String args[]) {
//Definieren Sie eine Variable mit dem Maximalwert jedes Typs
int intMax = Integer.MAX_VALUE;
long longMax = Long.MAX_VALUE;
float floatMax = Float.MAX_VALUE;
//Die Anzahl der effektiven Ziffern vom Typ float beträgt 7 Dezimalstellen(24 Ziffern binär)
// int → float
float floatFromIntMax = intMax;
System.out.println(intMax); // 2147483647
//↓ Der Wert nach 7 effektiven Ziffern geht verloren (andere Ergebnisse als vor der Typkonvertierung)
System.out.println(floatFromIntMax); // 2.14748365E9
// long → float
float floatFromLongMax = longMax;
System.out.println(longMax); // 9223372036854775807
//↓ Der Wert nach 7 effektiven Ziffern geht verloren (andere Ergebnisse als vor der Typkonvertierung)
System.out.println(floatFromLongMax); // 9.223372E18
//Die Anzahl der effektiven Ziffern vom Doppeltyp beträgt ungefähr 15 Dezimalstellen(53 Ziffern in Binärform)
// long → double
double doubleFromLongMax = longMax;
System.out.println(longMax); // 9223372036854775807
//↓ Werte nach 15 gültigen Ziffern gehen verloren (andere Ergebnisse als vor der Typkonvertierung)
System.out.println(doubleFromLongMax); // 9.223372036854776E18
// float → double
double doubleFromFloatMax = floatMax;
System.out.println(floatMax); // 3.4028235E38
//↓ Werte nach 15 gültigen Ziffern gehen verloren (andere Ergebnisse als vor der Typkonvertierung)
System.out.println(doubleFromFloatMax); // 3.4028234663852886E38
}
}
Sie können keinen großen Typ einem kleinen Typ zuweisen.
Führen Sie die Typkonvertierung explizit mit ** () ** cast operator
durch.
Main.java
class Main {
public static void main(String args[]) {
double numberDouble = 3.14;
//Sie können keinen großen Typ einem kleinen Typ zuweisen.
// int numberInt = numberDobule; // Type mismatch: cannot convert from double to int
//Mit dem Cast-Operator zwangsweise in den Typ int konvertiert
int numberInt = (int)number;
System.out.println(numberInt); //Wird als 3 ausgegeben
}
}
Bitte beachten Sie, dass einige Muster nicht konvertiert werden können. Zeichenfolgen können mit dem Cast-Operator nicht in den Typ int konvertiert werden.
Main.java
class Main {
public static void main(String args[]) {
//Beispiele, die nicht konvertiert werden können
String str = "Guten Morgen";
int num = (int)str; // Cannot cast from String to int
System.out.println(str);
}
}
** Hinweise zum Casting **
Bitte beachten Sie, dass einige Daten aufgrund der Typkonvertierung durch Casting verloren gehen.
Main.java
class Main {
public static void main(String args[]) {
short x = 257; //16 Bit-> 0000 0001 0000 0001
byte y = (byte)x; //8 Bits-> 0000 0001
System.out.println(y); //Wird als 1 ausgegeben
}
}
Main.java
class Main {
public static void main(String args[]) {
//Bei der Konvertierung von einer kleinen Zahl in eine Ganzzahl werden die Ziffern nach dem Dezimalpunkt abgeschnitten.
double d = 10.23;
int i = (int)d;
System.out.println(i); //Wird als 10 ausgegeben
float f = 33.44f;
int i2 = (int)f;
System.out.println(i2); //33 wird ausgegeben
}
}
Java führt möglicherweise automatisch Typkonvertierungen durch, die nicht vom Programmierer beabsichtigt sind. Dies wird unten erklärt.
Main.java
class Main {
public static void main(String args[]) {
int a = 1;
long b = 2;
//Die Variable a wird vor der Operation in einen langen Typ konvertiert
int c = a + b; // Type mismatch: cannot convert from long to int
}
}
↓ ** Lösung **
Main.java
class Main {
public static void main(String args[]) {
int a = 1;
long b = 2;
int c = (int)(a + b); //Der Fehler verschwindet, indem das Operationsergebnis in den Typ int umgewandelt wird.
System.out.println(c); // 3
}
}
Main.java
class Main {
public static void main(String args[]) {
int a = 1;
float b = 2.0f;
//Die Variable a wird vor der Operation in den Float-Typ konvertiert
int c = a + b; // Type mismatch: cannot convert from float to int
}
}
↓ ** Lösung **
Main.java
class Main {
public static void main(String args[]) {
int a = 1;
float b = 2.0f;
int c = (int)(a + b); //Der Fehler verschwindet, indem das Operationsergebnis in den Typ int umgewandelt wird.
System.out.println(c); // 3
}
}
Main.java
class Main {
public static void main(String args[]) {
int a = 1;
double b = 2.0;
//
int c = a + b; // Type mismatch: cannot convert from double to int
}
}
Main.java
class Main {
public static void main(String args[]) {
int a = 1;
double b = 2.0;
int c = (int)(a + b); //
System.out.println(c); // 3
}
}
Main.java
class Main {
public static void main(String args[]) {
byte a = 1;
byte b = 2;
//,
byte c = a + b; // Type mismatch: cannot convert from int to byte
}
}
↓ ** Lösung ** Der Fehler verschwindet, indem das Operationsergebnis in den Typ int umgewandelt wird. Wenn der Operand (Operationsziel) weder vom Typ long, vom Typ float noch vom Typ double ist, werden beide Operanden in den Typ int konvertiert. Die Variable ab wird vor der Operation in den Typ int konvertiert ↓ ** Lösung **
Main.java
class Main {
public static void main(String args[]) {
byte a = 1;
byte b = 2;
byte c = (byte)(a + b); //Der Fehler verschwindet, indem das Berechnungsergebnis in den Bytetyp umgewandelt wird.
System.out.println(c); // 3
}
}
Ich denke, dass Werbung (Promotion) zu unbeabsichtigten Ergebnissen und Fehlern führen kann. Sie müssen zum Zeitpunkt der Berechnung vorsichtig mit der numerischen Werbung sein.
Ich habe etwas über Typkonvertierung gelernt. Nächstes Mal werde ich mich mit [Variablem Umfang] befassen (https://qiita.com/morioheisei/items/c56ab32b68ce92d32206).
Recommended Posts