Cela ne fonctionnera pas lorsque l'objet est autre chose:
Object notAString = new Integer(42);
String str = (String) notAString; // will throw a ClassCastException
String.valueOf()cependant essaiera de convertir tout ce que vous y passez en un fichier String. Il gère à la fois les primitives ( 42) et les objets ( new Integer(42), en utilisant cet objet toString()):
String str;
str = String.valueOf(new Integer(42)); // str will hold "42"
str = String.valueOf("foo"); // str will hold "foo"
Object nullValue = null;
str = String.valueOf(nullValue); // str will hold "null"
Notez en particulier le dernier exemple: passer nullà String.valueOf()retournera la chaîne "null".
@AdamStelmaszczyk: Je doute qu'il y en ait qui soit pertinent. Peut-être que la diffusion est légèrement plus rapide, mais les autres différences (gestion des nuls, capacité à gérer d'autres types) sont simplement beaucoup plus importantes que toute différence de performance mineure qui pourrait exister.
Joachim Sauer
3
Pour pousser un peu plus cette question, y a-t-il une différence significative entre appeler String.valueOf()et obj.toString()? (Le premier qui me vient à l'esprit est que obj.toString(), grâce à une exception, si objest nul.)
Kevin
3
@Kevin: pour les types de référence (aka "objets"), la seule différence est ce qui se passe avec null. Si vous regardez l'implémentation de String.valueOf()dans votre JDK, vous verrez que tout ce qu'il fait pour les références non nulles est d'appeler toString().
Joachim Sauer
@JoachimSauer J'ai toujours pensé que String.valueOf()c'était plus élégant qu'un casting. Mais si String.valueOf()tout ce que fait le casting, et plus, y a-t-il des raisons pour lesquelles on choisirait d'utiliser un casting? Pourquoi n'a-t-il pas été abandonné?
Shahid M Zubair
1
@silver: En effet, j'ai trop simplifié. String.valueOf((Object) null)renverra la chaîne "null". L'appeler avec un littéral nullappellera String # valueOf (char []) qui jette en fait un NPE lorsque vous passez null.
Joachim Sauer
19
String.valueOf(foo)invoque la méthode de foo.toString() et affecte le résultat à la barre . Il s'agit d'une opération sûre de type null.
La diffusion affectera simplement foo à la barre , si les types correspondent. Sinon, l'expression lancera un ClassCastException.
La méthode String.valueOf est utilisée pour obtenir la représentation String de son objet paramètre.
La valeur (String) convertit la valeur de l'objet en chaîne.
Vous pouvez utiliser la méthode String.valueOf pour obtenir la représentation String d'un objet sans vous soucier des références nulles. Si vous essayez de convertir String sur une référence nulle, vous obtiendrez une NullPointerException.
final Object obj = null;
final String strValOfObj = String.valueOf(obj);
final String strCastOfObj = (String) obj;
if (strValOfObj == null) System.out.println("strValOfObj is null");
if (strCastOfObj == null) System.out.println("strCastOfObj is null");
Le premier c'est-à-dire, String.valueOfrenvoie une chaîne uniquement si l'objet est un type représentable qui est un type valeur ou une chaîne. Sinon, il lève l'exception.
Dans ce dernier, vous effectuez directement un casting qui peut échouer si l'objet n'est pas une chaîne.
dans String.valueOf (); string as work transtypage de tous les arguments passés dans la méthode valueof () convertis en String et tout comme integer.string () convertit un entier en chaîne uniquement
Réponses:
La conversion en chaîne ne fonctionne que lorsque l'objet est en fait une chaîne:
Object reallyAString = "foo"; String str = (String) reallyAString; // works.
Cela ne fonctionnera pas lorsque l'objet est autre chose:
Object notAString = new Integer(42); String str = (String) notAString; // will throw a ClassCastException
String.valueOf()
cependant essaiera de convertir tout ce que vous y passez en un fichierString
. Il gère à la fois les primitives (42
) et les objets (new Integer(42)
, en utilisant cet objettoString()
):String str; str = String.valueOf(new Integer(42)); // str will hold "42" str = String.valueOf("foo"); // str will hold "foo" Object nullValue = null; str = String.valueOf(nullValue); // str will hold "null"
Notez en particulier le dernier exemple: passer
null
àString.valueOf()
retournera la chaîne"null"
.la source
String.valueOf()
etobj.toString()
? (Le premier qui me vient à l'esprit est queobj.toString()
, grâce à une exception, siobj
est nul.)null
. Si vous regardez l'implémentation deString.valueOf()
dans votre JDK, vous verrez que tout ce qu'il fait pour les références non nulles est d'appelertoString()
.String.valueOf()
c'était plus élégant qu'un casting. Mais siString.valueOf()
tout ce que fait le casting, et plus, y a-t-il des raisons pour lesquelles on choisirait d'utiliser un casting? Pourquoi n'a-t-il pas été abandonné?String.valueOf((Object) null)
renverra la chaîne "null". L'appeler avec un littéralnull
appellera String # valueOf (char []) qui jette en fait un NPE lorsque vous passeznull
.String.valueOf(foo)
invoque la méthode de foo.toString()
et affecte le résultat à la barre . Il s'agit d'une opération sûre de type null.La diffusion affectera simplement foo à la barre , si les types correspondent. Sinon, l'expression lancera un
ClassCastException
.la source
String.valueOf(Object)
invoqueObject.toString()
Les deux génèrent la même sortie en cas de
String
.Casting
échoue si l'objet fourni n'est pas unstring.
la source
La diffusion signifie que l'objet doit être de type String, alors qu'il
String.valueOf()
peut également prendre d'autres types.la source
La méthode String.valueOf est utilisée pour obtenir la représentation String de son objet paramètre.
La valeur (String) convertit la valeur de l'objet en chaîne.
Vous pouvez utiliser la méthode String.valueOf pour obtenir la représentation String d'un objet sans vous soucier des références nulles. Si vous essayez de convertir String sur une référence nulle, vous obtiendrez une NullPointerException.
la source
Sortie :
strCastOfObj is null
la source
Le premier c'est-à-dire,
String.valueOf
renvoie une chaîne uniquement si l'objet est un type représentable qui est un type valeur ou une chaîne. Sinon, il lève l'exception.Dans ce dernier, vous effectuez directement un casting qui peut échouer si l'objet n'est pas une chaîne.
Exemple en ligne.
http://ideone.com/p7AGh5
la source
dans String.valueOf (); string as work transtypage de tous les arguments passés dans la méthode valueof () convertis en String et tout comme integer.string () convertit un entier en chaîne uniquement
la source