Manchmal verwirrt mich Java.
Ich habe eine Menge int Initialisierungen zu machen.
Was ist der echte Unterschied?
Integer.toString(i)
new Integer(i).toString()
Integer.toString
ruft die statische Methode in der Klasse Integer
auf. Es wird keine Instanz von Integer
benötigt.
Wenn Sie new Integer(i)
aufrufen, erstellen Sie eine Instanz vom Typ Integer
, die ein vollständiges Java -Objekt ist, das den Wert Ihres int einkapselt. Anschließend rufen Sie die Methode toString
auf, um sie aufzufordern, eine Zeichenfolgendarstellung von selbst zurückzugeben.
Wenn Sie nur einen int
drucken möchten, würden Sie den ersten verwenden, da dieser leichter und schneller ist und keinen zusätzlichen Speicher belegt (abgesehen von der zurückgegebenen Zeichenfolge).
Wenn Sie möchten, dass ein Objekt einen ganzzahligen Wert darstellt - um es beispielsweise in eine Auflistung einzufügen -, verwenden Sie den zweiten, da Sie ein vollwertiges Objekt erhalten, mit dem Sie alle möglichen Dinge ausführen können, die Sie mit einem bloßen int
nicht tun können. .
new Integer(i).toString()
erstellt zuerst ein (redundantes) Wrapper-Objekt um i
(das selbst ein Wrapper-Objekt sein kann Integer
).
Integer.toString(i)
wird bevorzugt, da keine unnötigen Objekte erstellt werden.
Eine weitere Option ist die statische String.valueOf
-Methode.
_String.valueOf(i)
_
Es fühlt sich für mich etwas besser an als Integer.toString(i)
. Wenn sich der Typ von i ändert, z. B. von int
zu double
, bleibt der Code korrekt.
Ich empfehle auch sehr mit
int integer = 42;
String string = integer + "";
Einfach und effektiv.
new Integer(i).toString();
Diese Anweisung erstellt das Objekt der Ganzzahl und ruft dann die Methoden toString(i)
auf, um die Zeichenfolgendarstellung des Ganzzahlwerts zurückzugeben.
Integer.toString(i);
Es gibt das String-Objekt zurück, das das bestimmte int (integer) darstellt, aber hier ist toString(int)
eine static
-Methode.
Zusammenfassung gibt im ersten Fall die Zeichenfolgendarstellung des Objekts zurück, während im zweiten Fall die Zeichenfolgendarstellung der Ganzzahl zurückgegeben wird.
Obwohl ich fhuchos Empfehlung von mag
String.valueOf(i)
Die Ironie ist, dass diese Methode tatsächlich aufruft
Integer.toString(i)
Verwenden Sie also String.valueOf(i)
, wenn Sie das Lesen mögen und keinen Radix benötigen, aber auch wissen, dass es weniger effizient ist als Integer.toString(i)
.
Wenn Sie in Bezug auf die Leistungsmessung die Zeitleistung berücksichtigen, ist Integer.toString (i); teuer, wenn Sie weniger als 100 Millionen Anrufe tätigen. Andernfalls, wenn es mehr als 100 Millionen Aufrufe sind, ist die Funktion new Integer (10) .toString () besser.
Unten sehen Sie den Code, mit dem Sie versuchen können, die Leistung zu messen.
public static void main(String args[]) {
int MAX_ITERATION = 10000000;
long starttime = System.currentTimeMillis();
for (int i = 0; i < MAX_ITERATION; ++i) {
String s = Integer.toString(10);
}
long endtime = System.currentTimeMillis();
System.out.println("diff1: " + (endtime-starttime));
starttime = System.currentTimeMillis();
for (int i = 0; i < MAX_ITERATION; ++i) {
String s1 = new Integer(10).toString();
}
endtime = System.currentTimeMillis();
System.out.println("diff2: " + (endtime-starttime));
}
In Bezug auf das Gedächtnis, die
new Integer (i) .toString ();
nimmt mehr Speicher in Anspruch, da das Objekt jedes Mal erstellt wird, sodass eine Speicherfragmentierung auftritt.
Ein einfacher Weg ist, ""
mit einer ganzen Zahl zu verketten:
int i = 100;
String s = "" + i;
jetzt hat s
100
als Zeichenfolgenwert.
Besser:
Integer.valueOf(i).toString()
Hier ruft Integer.toString
die statische Methode in der Klasse Integer auf. Es ist nicht erforderlich, dass das Objekt aufgerufen wird.
Wenn Sie new Integer(i)
aufrufen, erstellen Sie zuerst eine Instanz vom Typ Integer, die ein vollständiges Java -Objekt ist, das den Wert Ihres int i einkapselt. Anschließend rufen Sie die Methode toString
auf, um sie aufzufordern, eine Zeichenfolgendarstellung von sich selbst zurückzugeben.
1 .Integer.toString(i)
Integer i = new Integer(8);
// returns a string representation of the specified integer with radix 8
String retval = i.toString(516, 8);
System.out.println("Value = " + retval);
2 .new Integer(i).toString()
int i = 506;
String str = new Integer(i).toString();
System.out.println(str + " : " + new Integer(i).toString().getClass());////506 : class Java.lang.String