Ini tidak akan berfungsi jika objeknya adalah sesuatu yang lain:
Object notAString = new Integer(42);
String str = (String) notAString; // will throw a ClassCastException
String.valueOf()namun akan mencoba mengubah apa pun yang Anda berikan menjadi file String. Ini menangani primitif ( 42) dan objek ( new Integer(42), menggunakan objek itu 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"
Perhatikan terutama contoh terakhir: meneruskan nullke String.valueOf()akan mengembalikan string "null".
@AdamStelmaszczyk: Saya ragu ada yang relevan. Mungkin casting sedikit lebih cepat, tetapi perbedaan lainnya (penanganan null, kemampuan untuk menangani jenis lain) jauh lebih penting daripada perbedaan performa kecil yang mungkin ada.
Joachim Sauer
4
Untuk mendorong pertanyaan ini lebih jauh, apakah ada perbedaan yang signifikan antara menelepon String.valueOf()dan obj.toString()? (Yang pertama terlintas di benak saya adalah bahwa obj.toString()melalui pengecualian jika objnol.)
Kevin
3
@Kevin: untuk jenis referensi (alias "objek") satu-satunya perbedaan adalah apa yang terjadi dengan null. Jika Anda melihat implementasi String.valueOf()di JDK Anda, Anda akan melihat bahwa semua yang dilakukannya untuk referensi non-null adalah memanggil toString().
Joachim Sauer
1
Mencoba str = String.valueOf(null)di Java 7 Update 80, itu melempar NullPointerException.
perak
1
@ Silver: Memang, saya terlalu menyederhanakan. String.valueOf((Object) null)akan mengembalikan String "null". Memanggilnya dengan literal nullakan memanggil String # valueOf (char []) yang sebenarnya melempar NPE saat Anda masuk null.
Joachim Sauer
19
String.valueOf(foo)memanggil foo 's .toString()metode dan ditunjuk hasilnya ke dalam bar . Ini adalah operasi yang aman dan bertipe null.
Transmisi hanya akan menetapkan foo ke bilah , jika jenisnya cocok. Jika tidak, ekspresi tersebut akan menampilkan ClassCastException.
Metode String.valueOf digunakan untuk mendapatkan representasi String dari objek parameternya.
(String) nilai mentransmisikan nilai objek ke string.
Anda dapat menggunakan metode String.valueOf untuk mendapatkan representasi String dari suatu objek tanpa mengkhawatirkan referensi null. Jika Anda mencoba mentransmisikan String pada referensi null, Anda akan mendapatkan 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");
Yang pertama yaitu, String.valueOfmengembalikan string hanya jika objek adalah tipe yang dapat direpresentasikan yang merupakan tipe nilai atau String .. Jika tidak, itu akan melontarkan pengecualian.
Yang terakhir, Anda langsung melakukan casting yang bisa gagal jika objeknya bukan string.
di String.valueOf (); string sebagai pekerjaan typecasting semua argumen yang diteruskan dalam metode valueof () dikonversi dalam String dan seperti integer.string (), ubah integer menjadi string saja
Jawaban:
Mentransmisikan ke string hanya berfungsi jika objek sebenarnya adalah string:
Object reallyAString = "foo"; String str = (String) reallyAString; // works.
Ini tidak akan berfungsi jika objeknya adalah sesuatu yang lain:
Object notAString = new Integer(42); String str = (String) notAString; // will throw a ClassCastException
String.valueOf()
namun akan mencoba mengubah apa pun yang Anda berikan menjadi fileString
. Ini menangani primitif (42
) dan objek (new Integer(42)
, menggunakan objek itutoString()
):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"
Perhatikan terutama contoh terakhir: meneruskan
null
keString.valueOf()
akan mengembalikan string"null"
.sumber
String.valueOf()
danobj.toString()
? (Yang pertama terlintas di benak saya adalah bahwaobj.toString()
melalui pengecualian jikaobj
nol.)null
. Jika Anda melihat implementasiString.valueOf()
di JDK Anda, Anda akan melihat bahwa semua yang dilakukannya untuk referensi non-null adalah memanggiltoString()
.str = String.valueOf(null)
di Java 7 Update 80, itu melemparNullPointerException
.String.valueOf((Object) null)
akan mengembalikan String "null". Memanggilnya dengan literalnull
akan memanggil String # valueOf (char []) yang sebenarnya melempar NPE saat Anda masuknull
.String.valueOf(foo)
memanggil foo 's.toString()
metode dan ditunjuk hasilnya ke dalam bar . Ini adalah operasi yang aman dan bertipe null.Transmisi hanya akan menetapkan foo ke bilah , jika jenisnya cocok. Jika tidak, ekspresi tersebut akan menampilkan
ClassCastException
.sumber
String.valueOf(Object)
memanggilObject.toString()
Keduanya menghasilkan keluaran yang sama dalam kasus
String
.Casting
gagal dalam kasus objek yang diberikan Bukan astring.
sumber
Pengecoran berarti bahwa objek harus berjenis String, sementara
String.valueOf()
dapat mengambil jenis lainnya juga.sumber
Metode String.valueOf digunakan untuk mendapatkan representasi String dari objek parameternya.
(String) nilai mentransmisikan nilai objek ke string.
Anda dapat menggunakan metode String.valueOf untuk mendapatkan representasi String dari suatu objek tanpa mengkhawatirkan referensi null. Jika Anda mencoba mentransmisikan String pada referensi null, Anda akan mendapatkan NullPointerException.
sumber
Keluaran :
strCastOfObj is null
sumber
Yang pertama yaitu,
String.valueOf
mengembalikan string hanya jika objek adalah tipe yang dapat direpresentasikan yang merupakan tipe nilai atau String .. Jika tidak, itu akan melontarkan pengecualian.Yang terakhir, Anda langsung melakukan casting yang bisa gagal jika objeknya bukan string.
Contoh online.
http://ideone.com/p7AGh5
sumber
di String.valueOf (); string sebagai pekerjaan typecasting semua argumen yang diteruskan dalam metode valueof () dikonversi dalam String dan seperti integer.string (), ubah integer menjadi string saja
sumber