Javas acht grundlegende Datentypen und BigDecimal

Grunddatentyp

8 grundlegende Datentypen

Sie sind:

  1. 6 Arten von Zahlen: Byte, Short, Int, Long, Float, Double
  2. 1 Zeichentyp: char
  3. 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:

  1. Integer i1=40;Java kapselt den Code beim Kompilieren direkt Integer i1=Integer.valueOf(40);und verwendet dabei die Objekte im konstanten Pool.
  2. 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 == 40numerischen 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 setScaleBeibehalten 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

  1. Wenn wir BigDecimal verwenden, wird empfohlen, zum Erstellen von Objekten die BigDecimal-Konstruktionsmethode (String) zu verwenden, um Genauigkeitsverluste zu vermeiden.
  2. 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.
  3. Die Realisierung von BigDecimal verwendet BigInteger. Der Unterschied besteht darin, dass BigDecimal das Konzept der Dezimalstellen hinzufügt

Ich denke du magst

Origin blog.csdn.net/weixin_43901865/article/details/112566955
Empfohlen
Rangfolge