Ich würde nur verwenden "" + 42, aber hey, das bin ich. Formular Nr. 2 führt zu einem neuen ganzzahligen Objekt (für die meisten Werte von i) als Zwischenprodukt. Es wird auch mehr getippt.
16
@pst: Wenn das Zwischenobjekt ein Problem für Sie ist, "" + 42ist es nicht besser, da es ein Zwischenprodukt erfordert, StringBuilderdas viel schwerer als ein ist Integer.
Joachim Sauer
47
"" + 42 könnte funktionieren, ist aber eine schlechte Idee. Leute wie ich werden sich Ihren Code ansehen und versuchen herauszufinden, was zum Teufel mit der leeren Zeichenfolge passiert ist.
Mainguy
3
Ich würde es nicht empfehlen, "" + 42da Sie beim Anhängen von Ganzzahlzeichenfolgen möglicherweise die Werte hinzufügen und diese nicht realisieren.
BoltzmannBrain
20
Wenn Sie nicht viel tippen möchten, sollten Sie wahrscheinlich nicht in Java programmieren.
Adam Pierce
Antworten:
548
Integer.toStringruft die statische Methode in der Klasse auf Integer. Es braucht keine Instanz von Integer.
Wenn Sie aufrufen new Integer(i), erstellen Sie eine Instanz vom Typ Integer, bei der es sich um ein vollständiges Java-Objekt handelt, das den Wert Ihres int kapselt. Anschließend rufen Sie die toStringMethode auf, um sie aufzufordern, eine Zeichenfolgendarstellung von sich selbst zurückzugeben .
Wenn Sie nur eine drucken möchten int, verwenden Sie die erste, da sie leichter und schneller ist und keinen zusätzlichen Speicher benötigt (abgesehen von der zurückgegebenen Zeichenfolge).
Wenn Sie möchten, dass ein Objekt einen ganzzahligen Wert darstellt, um es beispielsweise in eine Sammlung aufzunehmen, verwenden Sie das zweite, da es Ihnen ein vollwertiges Objekt bietet, mit dem Sie alle möglichen Dinge ausführen können, die Sie mit einem Bare nicht tun können int.
Ja. Es sei denn, Sie müssen RADIX verwenden (in diesem Fall müssen Sie Integer.toString verwenden)
marcolopes
14
new Integer(i).toString();
Diese Anweisung erstellt das Objekt der Ganzzahl und ruft dann ihre Methoden toString(i)auf, um die String-Darstellung des Integer-Werts zurückzugeben .
Integer.toString(i);
Es gibt das String-Objekt zurück, das das spezifische int (Ganzzahl) darstellt , aber hier toString(int)ist eine staticMethode.
Die Zusammenfassung gibt im ersten Fall die Zeichenfolgendarstellung des Objekts zurück, während im zweiten Fall die Zeichenfolgendarstellung der Ganzzahl zurückgegeben wird.
Dies ist definitiv eine schlechte Form, da beide auf einem ziemlich subtilen Teil der Java-Sprache beruhen und weniger effizient sind als Integer.toString (i). Siehe diese SO post
rickcnagy
Dies könnte ineffizient sein. Ich schlage vor, einige konventionelle Optionen wie Integer.toString oder String.valueOf zu verwenden. Überprüfen Sie hier javadevnotes.com/java-integer-to-string-examples
JavaDev
Es ist im Allgemeinen eine schlechte Idee, Dinge so unintuitiv zu machen. Offensichtlichere Optionen wie Integer.toString()einige zusätzliche Tastenanschläge sind möglicherweise viel klarer, was entscheidend ist, wenn Sie den Code beibehalten möchten.
Calvin Li
Würde dies nicht automatisch die toString()Methode der Ganzzahlvariablen aufrufen ?
Ankit Deshpande
11
Obwohl ich fhuchos Empfehlung von mag
String.valueOf(i)
Die Ironie ist, dass diese Methode tatsächlich aufruft
Integer.toString(i)
Verwenden String.valueOf(i)Sie es daher , wenn Ihnen das Lesen gefällt und Sie kein 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, dann ist Integer.toString (i); ist teuer, wenn Sie weniger als 100 Millionen Mal anrufen. Wenn es sich um mehr als 100 Millionen Aufrufe handelt, ist die Leistung der neuen Ganzzahl (10) .toString () besser.
Unten ist der Code durch u kann versuchen, die Leistung zu messen,
publicstaticvoid 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 =newInteger(10).toString();}
endtime =System.currentTimeMillis();System.out.println("diff2: "+(endtime-starttime));}
In Bezug auf das Gedächtnis, die
neue Ganzzahl (i) .toString ();
benötigt mehr Speicher, da das Objekt jedes Mal erstellt wird, sodass eine Speicherfragmentierung auftritt.
Ich habe diesen Code in IntelliJ IDEA eingefügt und eine Warnung erhalten: " new Integer(10).toString() can be simplified to Integer.toString(10)"
oksayt
Dieser Code funktioniert für mich. Ich erhalte ungefähr 420 Millisekunden für Integer.toString (10) und 525 Millisekunden für neue Integer (10) .toString ()
Hätte beim Aufwärmen geholfen, sonst sind die Ergebnisse nicht gültig!
Sixones
Wenn Sie sagen, dass einer in einem Fall teuer ist und der andere in dem anderen Fall besser, bedeutet dies, dass der andere in jeder Situation besser / kostengünstiger ist.
Ich denke, das ist besser, weil @Dhiraj darauf hinwies, dass in Bezug auf den Speicher die "neue Ganzzahl (i) .toString ();" nimmt mehr Speicher in Anspruch, da ein neues Objekt erstellt wird, anstatt nur den Integer-Wert abzurufen und diesen in eine Zeichenfolge zu konvertieren.
Patricia
4
@Lucy Integer.valueOf (i) gibt eine neue Ganzzahl zurück, also gibt es keinen Unterschied
inigoD
Sie geben überhaupt keine Antwort auf die Frage. Die Frage ist, was ist der Unterschied zwischen bla und bla, nicht was ist ein besserer Ersatz für bla.
ahitt6345
2
Einfacher Weg ist nur ""mit Ganzzahl zu verketten :
Hier wird
Integer.toStringdie statische Methode in der Klasse Integer aufgerufen. Das Objekt muss nicht aufgerufen werden.
Wenn Sie anrufen new Integer(i) , erstellen Sie zuerst eine Instanz vom Typ Integer, bei der es sich um ein vollständiges Java-Objekt handelt, das den Wert Ihres int i kapselt. Anschließend rufen Sie die toStringMethode auf, um sie aufzufordern, eine Zeichenfolgendarstellung von sich selbst zurückzugeben.
Integer i =newInteger(8);// returns a string representation of the specified integer with radix 8String retval = i.toString(516,8);System.out.println("Value = "+ retval);
2.new Integer(i).toString()
int i =506;String str =newInteger(i).toString();System.out.println(str +" : "+newInteger(i).toString().getClass());////506 : class java.lang.String
"" + 42
, aber hey, das bin ich. Formular Nr. 2 führt zu einem neuen ganzzahligen Objekt (für die meisten Werte von i) als Zwischenprodukt. Es wird auch mehr getippt."" + 42
ist es nicht besser, da es ein Zwischenprodukt erfordert,StringBuilder
das viel schwerer als ein istInteger
."" + 42
da Sie beim Anhängen von Ganzzahlzeichenfolgen möglicherweise die Werte hinzufügen und diese nicht realisieren.Antworten:
Integer.toString
ruft die statische Methode in der Klasse aufInteger
. Es braucht keine Instanz vonInteger
.Wenn Sie aufrufen
new Integer(i)
, erstellen Sie eine Instanz vom TypInteger
, bei der es sich um ein vollständiges Java-Objekt handelt, das den Wert Ihres int kapselt. Anschließend rufen Sie dietoString
Methode auf, um sie aufzufordern, eine Zeichenfolgendarstellung von sich selbst zurückzugeben .Wenn Sie nur eine drucken möchten
int
, verwenden Sie die erste, da sie leichter und schneller ist und keinen zusätzlichen Speicher benötigt (abgesehen von der zurückgegebenen Zeichenfolge).Wenn Sie möchten, dass ein Objekt einen ganzzahligen Wert darstellt, um es beispielsweise in eine Sammlung aufzunehmen, verwenden Sie das zweite, da es Ihnen ein vollwertiges Objekt bietet, mit dem Sie alle möglichen Dinge ausführen können, die Sie mit einem Bare nicht tun können
int
.quelle
new Integer(i).toString()
Zuerst wird ein (redundantes) Wrapper-Objekt erstellti
(das selbst ein Wrapper-Objekt sein kannInteger
).Integer.toString(i)
wird bevorzugt, da keine unnötigen Objekte erstellt werden.quelle
Eine weitere Option ist die statische
String.valueOf
Methode.Es fühlt sich etwas richtiger an als
Integer.toString(i)
für mich. Wenn sich der Typ von i ändert, z. B. vonint
bisdouble
, bleibt der Code korrekt.quelle
new Integer(i).toString();
Diese Anweisung erstellt das Objekt der Ganzzahl und ruft dann ihre Methoden
toString(i)
auf, um die String-Darstellung des Integer-Werts zurückzugeben .Integer.toString(i);
Es gibt das String-Objekt zurück, das das spezifische int (Ganzzahl) darstellt , aber hier
toString(int)
ist einestatic
Methode.Die Zusammenfassung gibt im ersten Fall die Zeichenfolgendarstellung des Objekts zurück, während im zweiten Fall die Zeichenfolgendarstellung der Ganzzahl zurückgegeben wird.
quelle
Ich empfehle auch sehr zu verwenden
Einfach und effektiv.
quelle
Integer.toString()
einige zusätzliche Tastenanschläge sind möglicherweise viel klarer, was entscheidend ist, wenn Sie den Code beibehalten möchten.toString()
Methode der Ganzzahlvariablen aufrufen ?Obwohl ich fhuchos Empfehlung von mag
Die Ironie ist, dass diese Methode tatsächlich aufruft
Verwenden
String.valueOf(i)
Sie es daher , wenn Ihnen das Lesen gefällt und Sie kein Radix benötigen, aber auch wissen, dass es weniger effizient ist alsInteger.toString(i)
.quelle
Wenn Sie in Bezug auf die Leistungsmessung die Zeitleistung berücksichtigen, dann ist Integer.toString (i); ist teuer, wenn Sie weniger als 100 Millionen Mal anrufen. Wenn es sich um mehr als 100 Millionen Aufrufe handelt, ist die Leistung der neuen Ganzzahl (10) .toString () besser.
Unten ist der Code durch u kann versuchen, die Leistung zu messen,
In Bezug auf das Gedächtnis, die
benötigt mehr Speicher, da das Objekt jedes Mal erstellt wird, sodass eine Speicherfragmentierung auftritt.
quelle
new Integer(10).toString() can be simplified to Integer.toString(10)
"Besser:
quelle
Einfacher Weg ist nur
""
mit Ganzzahl zu verketten :Jetzt
s
wird100
als Zeichenfolge Wert.quelle
Hier wird
Integer.toString
die statische Methode in der Klasse Integer aufgerufen. Das Objekt muss nicht aufgerufen werden.Wenn Sie anrufen
new Integer(i)
, erstellen Sie zuerst eine Instanz vom Typ Integer, bei der es sich um ein vollständiges Java-Objekt handelt, das den Wert Ihres int i kapselt. Anschließend rufen Sie dietoString
Methode auf, um sie aufzufordern, eine Zeichenfolgendarstellung von sich selbst zurückzugeben.quelle
1.
Integer.toString(i)
2.
new Integer(i).toString()
quelle