Inhaltsverzeichnis
Grunddatentyp
8 grundlegende Datentypen
Sie sind:
- 6 Arten von Zahlen: Byte, Short, Int, Long, Float, Double
- 1 Zeichentyp: char
- 1 Boolescher Typ: Boolescher Wert
Bytes, die von acht Basisdatentypen belegt werden
Grundtyp | Bisschen | Byte | Standardeinstellungen |
---|---|---|---|
Boolescher Wert | 1 | falsch | |
Byte | 8 | 1 | 0 |
verkohlen | 16 | 2 | 'u0000' |
kurz | 16 | 2 | 0 |
int | 32 | 4 | 0 |
lange | 64 | 8 | 0L |
schweben | 32 | 4 | 0f |
doppelt | 64 | 8 | 0d |
3. Grundlegende und String-Konvertierungsmethode
Nehmen Sie als Beispiel die plastische Chirurgie
3.1 Ganzzahlige Konvertierung in einen String
String str = String.valueOf(int i);
String str = Integer.toString(int i);
String str = “ ” + i ;
3.2 Konvertieren Sie eine Zeichenfolge in eine Ganzzahl
int i = Integer.parseIn(String str)
int i = Integer.valueOf().intValue()
//说明:
//Integer.parseIn和Integer.valueOf 不同,
//前者生成的是整型,而后者是一个对象,所以要通过intValue()来获得对象的值
Art der Verpackung
Verpackungstypen, die acht Basisdatentypen entsprechen
boolean -> Boolesches
Byte -> Byte
char -> Zeichen
kurz -> Short
int -> Integer
long -> Long
float -> Float
double -> Double
Grundkonvertierung von Datentyp und Verpackungstyp
1. Konvertierung grundlegender Datentypen in Verpackungstypen (Boxen)
Integer a = new Integer (1);
Integer b = 1;//jdk1.5 之后可以通过这种方式自动装箱
Integer c = Integer.valueOf(1);
2. Konvertierung des Verpackungstyps in den Basisdatentyp (Unboxing)
int a1 = a.intValue();
int b1 = b;//自动拆箱
Double c1;
double c2= double(c1);//通过强制转换
8 Grundtypen von Verpackungsklassen und konstante Pools
Die meisten Wrapper-Klassen von Java-Basistypen implementieren eine konstante Pool-Technologie, nämlich Byte, Short, Integer, Long, Character, Boolean. Die ersten vier Wrapper-Klassen erstellen standardmäßig den entsprechenden Typ von Cache-Daten mit dem Wert [-128, 127] , Character erstellt Cache-Daten mit einem Wert im Bereich von [0,127] und Boolean gibt True oder False direkt zurück. Wenn der entsprechende Bereich überschritten wird, wird weiterhin ein neues Objekt erstellt.
Die beiden Gleitkomma-Zahlenklassen Float und Double implementieren keine konstante Pooltechnologie.
Integer i1 = 33;
Integer i2 = 33;
System.out.println(i1 == i2);// 输出 true
Integer i11 = 333;
Integer i22 = 333;
System.out.println(i11 == i22);// 输出 false
Double i3 = 1.2;
Double i4 = 1.2;
System.out.println(i3 == i4);// 输出 false
Anwendungsszenarien:
Integer i1=40;
Java kapselt den Code beim Kompilieren direktInteger i1=Integer.valueOf(40);
und verwendet dabei die Objekte im konstanten Pool.Integer i1 = new Integer(40);
In diesem Fall wird ein neues Objekt erstellt.
Integer i1 = 40;
Integer i2 = new Integer(40);
System.out.println(i1==i2);//输出 false
Lassen Sie mich ein schwierigeres Beispiel geben:
Integer i1 = 40;
Integer i2 = 40;
Integer i3 = 0;
Integer i4 = new Integer(40);
Integer i5 = new Integer(40);
Integer i6 = new Integer(0);
System.out.println("i1=i2 " + (i1 == i2));
System.out.println("i1=i2+i3 " + (i1 == i2 + i3));
System.out.println("i1=i4 " + (i1 == i4));
System.out.println("i4=i5 " + (i4 == i5));
System.out.println("i4=i5+i6 " + (i4 == i5 + i6));
System.out.println("40=i5+i6 " + (40 == i5 + i6));
Ausgabe:
i1=i2 true
i1=i2+i3 true
i1=i4 false
i4=i5 false
i4=i5+i6 true
40=i5+i6 true
Erläuterung:
Anweisung i4 == i5 + i6
: Da +
dieser Operator nicht auf Integer-Objekte anwendbar ist, werden zuerst i5 und i6 automatisch entpackt und die Werte hinzugefügt, d i4 == 40
. H. Dann kann das Integer-Objekt nicht direkt mit dem Wert verglichen werden, sodass das automatische Entpacken des i4-Konvertierungswerts von 40 diese Anweisung in den endgültigen 40 == 40
numerischen Vergleich umwandelt .
BigDecimal
Das "Alibaba Java Development Manual" erwähnt: Die äquivalente Beurteilung zwischen Gleitkommazahlen, Basisdatentypen kann nicht mit == verglichen werden, und Verpackungsdatentypen können nicht mit Gleichheit beurteilt werden. Betrachten Sie das folgende Beispiel:
float a = 1.0f - 0.9f;
float b = 0.9f - 0.8f;
System.out.println(a);// 0.100000024
System.out.println(b);// 0.099999964
System.out.println(a == b);// false
Mit mathematischen Grundkenntnissen wissen wir klar, dass die Ausgabe nicht das ist, was wir wollen (Genauigkeitsverlust). Wie können wir dieses Problem lösen?
Eine sehr häufige Methode besteht darin, mit BigDecimal den Wert einer Gleitkommazahl zu definieren und dann arithmetische Operationen für die Gleitkommazahl auszuführen.
BigDecimal a = new BigDecimal("1.0");
BigDecimal b = new BigDecimal("0.9");
BigDecimal c = new BigDecimal("0.8");
BigDecimal x = a.subtract(b); //两数相减
BigDecimal y = b.subtract(c);
System.out.println(x); /* 0.1 */
System.out.println(y); /* 0.1 */
System.out.println(Objects.equals(x, y)); /* true */
BigDecimal Größenvergleich
a.compareTo(b)
: Rückgabe -1 bedeutet, dass a kleiner als b ist, 0 bedeutet, dass a gleich b ist, 1 bedeutet, dass a größer als b ist
BigDecimal a = new BigDecimal("1.0");
BigDecimal b = new BigDecimal("0.9");
System.out.println(a.compareTo(b));// 1
BigDecimal behält einige Dezimalstellen bei
Durch setScale
Beibehalten mehrerer Dezimalstellen und Möglichkeiten zum Festlegen von Aufbewahrungsregeln. Es gibt viele Aufbewahrungsregeln, an die Sie sich nicht erinnern müssen. IDEA wird Sie dazu auffordern.
BigDecimal m = new BigDecimal("1.255433");
BigDecimal n = m.setScale(3,BigDecimal.ROUND_HALF_DOWN);
System.out.println(n);// 1.255
Hinweis
- Wenn wir BigDecimal verwenden, wird empfohlen, zum Erstellen von Objekten die BigDecimal-Konstruktionsmethode (String) zu verwenden, um Genauigkeitsverluste zu vermeiden.
- BigDecimal wird hauptsächlich zum Bearbeiten von (großen) Gleitkommazahlen verwendet, BigInteger wird hauptsächlich zum Bearbeiten großer Ganzzahlen (mehr als langer Typ) verwendet.
- Die Realisierung von BigDecimal verwendet BigInteger. Der Unterschied besteht darin, dass BigDecimal das Konzept der Dezimalstellen hinzufügt