Es wird nicht funktionieren, wenn das Objekt etwas anderes ist:
Object notAString =newInteger(42);String str =(String) notAString;// will throw a ClassCastException
String.valueOf()Es wird jedoch versucht, alles, was Sie übergeben, in a umzuwandeln String. Es behandelt sowohl Grundelemente ( 42) als auch Objekte ( new Integer(42)unter Verwendung dieses Objekts toString()):
String str;
str =String.valueOf(newInteger(42));// str will hold "42"
str =String.valueOf("foo");// str will hold "foo"Object nullValue =null;
str =String.valueOf(nullValue);// str will hold "null"
Beachten Sie insbesondere das letzte Beispiel: Wenn Sie nullan übergeben , String.valueOf()wird die Zeichenfolge zurückgegeben "null".
@AdamStelmaszczyk: Ich bezweifle, dass es irgendetwas gibt, das relevant ist. Vielleicht ist das Casting etwas schneller, aber die anderen Unterschiede (Null-Handling, Fähigkeit, mit anderen Typen umzugehen) sind nur wesentlich wichtiger als etwaige geringfügige Leistungsunterschiede.
Joachim Sauer
3
Gibt es einen signifikanten Unterschied zwischen Anrufen String.valueOf()und obj.toString()? (Der erste, der mir in den Sinn kommt, ist, dass obj.toString()durch eine Ausnahme, wenn objnull ist.)
Kevin
3
@ Kevin: Bei Referenztypen (auch "Objekte" genannt) ist der einzige Unterschied, was passiert null. Wenn Sie sich die Implementierung String.valueOf()in Ihrem JDK ansehen, werden Sie feststellen, dass für Nicht-Null-Referenzen nur ein Aufruf erforderlich ist toString().
Joachim Sauer
@ JoachimSauer Ich fand String.valueOf()es immer eleganter als eine Besetzung. Aber wenn String.valueOf()alles, was das Casting tut, und noch mehr, gibt es Gründe, warum man sich für ein Casting entscheiden würde? Warum wurde es nicht veraltet?
Shahid M Zubair
1
@silver: In der Tat habe ich zu stark vereinfacht. String.valueOf((Object) null)gibt den String "null" zurück. nullWenn Sie es mit einem Literal aufrufen, wird String # valueOf (char []) aufgerufen, der beim Übergeben tatsächlich eine NPE auslöst null.
Joachim Sauer
19
String.valueOf(foo)Invokes foo ‚s .toString()Verfahren und weist das Ergebnis auf die die bar . Es ist null und typsicher.
Beim Casting wird der Leiste nur foo zugewiesen , wenn die Typen übereinstimmen. Andernfalls wird der Ausdruck a auslösen .ClassCastException
Die String.valueOf-Methode wird verwendet, um die String-Darstellung des Parameterobjekts abzurufen.
Der Wert (String) wandelt den Objektwert in einen String um.
Sie können die String.valueOf-Methode verwenden, um die String-Darstellung eines Objekts abzurufen, ohne sich um Nullreferenzen kümmern zu müssen. Wenn Sie versuchen, String in eine Nullreferenz umzuwandeln, erhalten Sie eine NullPointerException.
Die erste, dh, String.valueOfgibt nur dann eine Zeichenfolge zurück, wenn das Objekt ein darstellbarer Typ ist, der ein Werttyp oder eine Zeichenfolge ist. Andernfalls wird die Ausnahme ausgelöst.
In letzterem Fall werden Sie direkt umgewandelt, was fehlschlagen kann, wenn das Objekt keine Zeichenfolge ist.
in String.valueOf (); string as work typecasting alle Argumente, die in der Methode valueof () übergeben wurden, konvertieren in String und konvertieren genau wie integer.string () Integer nur in String
Antworten:
Das Umwandeln in einen String funktioniert nur, wenn das Objekt tatsächlich ein String ist:
Es wird nicht funktionieren, wenn das Objekt etwas anderes ist:
String.valueOf()
Es wird jedoch versucht, alles, was Sie übergeben, in a umzuwandelnString
. Es behandelt sowohl Grundelemente (42
) als auch Objekte (new Integer(42)
unter Verwendung dieses ObjektstoString()
):Beachten Sie insbesondere das letzte Beispiel: Wenn Sie
null
an übergeben ,String.valueOf()
wird die Zeichenfolge zurückgegeben"null"
.quelle
String.valueOf()
undobj.toString()
? (Der erste, der mir in den Sinn kommt, ist, dassobj.toString()
durch eine Ausnahme, wennobj
null ist.)null
. Wenn Sie sich die ImplementierungString.valueOf()
in Ihrem JDK ansehen, werden Sie feststellen, dass für Nicht-Null-Referenzen nur ein Aufruf erforderlich isttoString()
.String.valueOf()
es immer eleganter als eine Besetzung. Aber wennString.valueOf()
alles, was das Casting tut, und noch mehr, gibt es Gründe, warum man sich für ein Casting entscheiden würde? Warum wurde es nicht veraltet?String.valueOf((Object) null)
gibt den String "null" zurück.null
Wenn Sie es mit einem Literal aufrufen, wird String # valueOf (char []) aufgerufen, der beim Übergeben tatsächlich eine NPE auslöstnull
.String.valueOf(foo)
Invokes foo ‚s.toString()
Verfahren und weist das Ergebnis auf die die bar . Es ist null und typsicher.Beim Casting wird der Leiste nur foo zugewiesen , wenn die Typen übereinstimmen. Andernfalls wird der Ausdruck a auslösen .
ClassCastException
quelle
String.valueOf(Object)
ruftObject.toString()
Beide erzeugen im Fall von die gleiche Ausgabe
String
.Casting
schlägt fehl, wenn das angegebene Objekt nicht a iststring.
quelle
Casting bedeutet, dass das Objekt vom Typ String sein muss, während
String.valueOf()
es auch andere Typen annehmen kann.quelle
Die String.valueOf-Methode wird verwendet, um die String-Darstellung des Parameterobjekts abzurufen.
Der Wert (String) wandelt den Objektwert in einen String um.
Sie können die String.valueOf-Methode verwenden, um die String-Darstellung eines Objekts abzurufen, ohne sich um Nullreferenzen kümmern zu müssen. Wenn Sie versuchen, String in eine Nullreferenz umzuwandeln, erhalten Sie eine NullPointerException.
quelle
Ausgabe :
strCastOfObj is null
quelle
Die erste, dh,
String.valueOf
gibt nur dann eine Zeichenfolge zurück, wenn das Objekt ein darstellbarer Typ ist, der ein Werttyp oder eine Zeichenfolge ist. Andernfalls wird die Ausnahme ausgelöst.In letzterem Fall werden Sie direkt umgewandelt, was fehlschlagen kann, wenn das Objekt keine Zeichenfolge ist.
Online-Beispiel.
http://ideone.com/p7AGh5
quelle
in String.valueOf (); string as work typecasting alle Argumente, die in der Methode valueof () übergeben wurden, konvertieren in String und konvertieren genau wie integer.string () Integer nur in String
quelle