String ve String.valueOf'a çevrim arasındaki fark


89

Arasındaki fark nedir

Object foo = "something";
String bar = String.valueOf(foo);

ve

Object foo = "something";
String bar = (String) foo;

17
Uh, aynı değiller ... hiç.
Algı

Yanıtlar:


150

Dizeye çevrim, yalnızca nesne aslında bir dizge olduğunda çalışır :

Object reallyAString = "foo";
String str = (String) reallyAString; // works.

Nesne başka bir şey olduğunda işe yaramaz:

Object notAString = new Integer(42);
String str = (String) notAString; // will throw a ClassCastException

String.valueOf()ancak, ona ne iletirseniz onu bir String. Hem ilkelleri ( 42) hem de nesneleri ( new Integer(42)bu nesneyi kullanarak ) işler 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"

Geçen: özellikle son örneği Not nulliçin String.valueOf()dize döndürür "null".


14
@AdamStelmaszczyk: İlgili herhangi bir şey olduğundan şüpheliyim. Belki döküm biraz daha hızlıdır, ancak diğer farklılıklar (boş işleme, diğer türleri işleme yeteneği) olabilecek herhangi bir küçük performans farkından önemli ölçüde daha önemlidir.
Joachim Sauer

4
Bu soruyu biraz daha ileri götürmek gerekirse, aramak String.valueOf()ve aramak arasında önemli bir fark var obj.toString()mı? (Aklıma gelen ilk şey, obj.toString()eğer boşsa bir istisna yoluyla olacaktır obj.)
Kevin

3
@Kevin: referans türleri (aka "nesneler") için tek fark, ne olduğu null. String.valueOf()JDK'nızdaki uygulamasına bakarsanız, boş olmayan referanslar için yaptığı tek şeyin aramak olduğunu göreceksiniz toString().
Joachim Sauer

1
Güvenilir str = String.valueOf(null)Güncelleme 80 Java 7, bir atar NullPointerException.
gümüş

1
@silver: Gerçekten çok basitleştirdim. String.valueOf((Object) null)"null" dizesini döndürür. Onu bir değişmez nulldeğerle çağırmak, siz geçtiğinizde aslında bir NPE atan String # valueOf (char []) 'ı çağırır null.
Joachim Sauer

19

String.valueOf(foo)başlatır foo 'in .toString()yöntemi ve tayin için sonuç çubuğu . Boş ve tip güvenli işlemdir.

Will sadece atama Döküm foo için bara tipleri eşleştirme ise,. Aksi takdirde, ifade bir ClassCastException.


5
Açıklayan İçin 1 String.valueOf(Object)çağırırObject.toString()
Ryan Amos

4

Her ikisi de olması durumunda aynı çıktıyı üretir String.

Casting sağlanan nesne bir Değilse başarısız olur string.


3

Dönüşüm, nesnenin String türünde olması gerektiği anlamına gelirken String.valueOf(), diğer türleri de alabilir.


2

String.valueOf yöntemi, parametre nesnesinin String temsilini almak için kullanılır.

(Dize) değeri, nesne değerini dizeye çevirir.

Boş başvurular hakkında endişelenmeden bir nesnenin String temsilini almak için String.valueOf yöntemini kullanabilirsiniz. String'i boş bir referansa dönüştürmeye çalışırsanız, bir NullPointerException alırsınız.


1
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");

Çıktı :strCastOfObj is null


0

İlki ie, String.valueOfyalnızca nesne bir değer türü veya Dize olan temsil edilebilir bir türse bir dizge döndürür .. Aksi takdirde istisnayı atar.

İkincisinde, nesne bir dizge değilse, başarısız olabilecek doğrudan çevrim yapıyorsunuz.

Çevrimiçi örnek.

http://ideone.com/p7AGh5


Ne tür bir istisna?
Yousha Aleayoub

0

String.valueOf (); çalışma türü olarak dize, valueof () yönteminde iletilen tüm argümanları String'e dönüştürür ve tıpkı integer.string () gibi, tamsayıyı yalnızca dizeye dönüştürür

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.