Pernahkah Anda melihat kode sumber dari kedua metode ini?
Memiliki QUIT - Anony-Mousse
1
Saya lebih suka ""+b. Ini lebih lambat tetapi lebih efisien untuk pengembang. Jika Anda menginginkan kinerja terbaik, Anda dapat menulis data ke / dari ByteBuffer langsung, yaitu mengubah apa yang Anda lakukan dengan String sehingga Anda tidak membutuhkannya.
Peter Lawrey
Juga, jika Anda ingin diperlakukan nullsebagai false, Anda dapat menggunakanString.format("%b", b)
ZhekaKozlov
Jawaban:
145
Saya tidak berpikir akan ada perbedaan kinerja yang signifikan di antara mereka, tetapi saya lebih suka cara pertama.
Jika Anda memiliki Booleanreferensi, Boolean.toString(boolean)akan membuang NullPointerExceptionjika referensi Anda null. Saat referensi dibuka kotaknyaboolean dimasukkan sebelum diteruskan ke metode.
Sementara, String.valueOf()metode seperti yang ditunjukkan oleh kode sumber, melakukan nullpemeriksaan eksplisit :
jadi seperti yang Anda lihat, ini akan menguji terlebih dahulu nulldan kemudian memanggil toString()metode pada objek Anda.
Menelepon Boolean.toString(b)akan dipanggil
publicstaticString toString(boolean b){return b ?"true":"false";}
yang sedikit lebih lambat dari b.toString()sejak JVM perlu pertama unboxBoolean untuk booleanyang akan lulus sebagai argumen untuk Boolean.toString(...)sementara b.toString()digunakan ulang private boolean valuelapangan di Booleanobjek yang memegang negaranya.
publicclassSandbox{/**
* @param args the command line arguments
*/publicstaticvoid main(String[] args){Boolean b =true;boolean z =false;
echo (b);
echo (z);
echo ("Value of b= "+ b +"\nValue of z= "+ z);}publicstaticvoid echo(Object obj){System.out.println(obj);}}
Result--------------truefalseValue of b=trueValue of z=false--------------
Bisakah Anda menjelaskan mengapa Anda tidak merekomendasikan penggunaan untuk penggunaan produksi? Bisakah itu gagal dalam beberapa skenario?
lazyvab
@lazyvab Sejujurnya saya tidak tahu! Saya tidak menulis Java lagi tetapi saya hanya bisa menduga bahwa itu adalah sesuatu yang pasti pernah saya dengar. Saya telah memprogram dalam bahasa lain selama beberapa tahun terakhir tetapi tidak mengerti mengapa menggunakan ini dalam produksi akan merugikan. Lagipula System.out.printlnuntuk debugging sih, kan?
jskidd3
1
Tergantung apa yang Anda maksud dengan "efisien". Dari segi performa, kedua versi sama dengan bytecode yang sama.
""+b
. Ini lebih lambat tetapi lebih efisien untuk pengembang. Jika Anda menginginkan kinerja terbaik, Anda dapat menulis data ke / dari ByteBuffer langsung, yaitu mengubah apa yang Anda lakukan dengan String sehingga Anda tidak membutuhkannya.null
sebagaifalse
, Anda dapat menggunakanString.format("%b", b)
Jawaban:
Saya tidak berpikir akan ada perbedaan kinerja yang signifikan di antara mereka, tetapi saya lebih suka cara pertama.
Jika Anda memiliki
Boolean
referensi,Boolean.toString(boolean)
akan membuangNullPointerException
jika referensi Andanull
. Saat referensi dibuka kotaknyaboolean
dimasukkan sebelum diteruskan ke metode.Sementara,
String.valueOf()
metode seperti yang ditunjukkan oleh kode sumber, melakukannull
pemeriksaan eksplisit :Uji saja kode ini:
Untuk boolean primitif, tidak ada perbedaan.
sumber
Jika Anda yakin bahwa nilainya tidak,
null
Anda dapat menggunakan opsi ketiga yaitudan kodenya terlihat seperti
Jika Anda ingin aman dari nol, gunakan
String.valueOf(b)
kode seperti apajadi seperti yang Anda lihat, ini akan menguji terlebih dahulu
null
dan kemudian memanggiltoString()
metode pada objek Anda.Menelepon
Boolean.toString(b)
akan dipanggilyang sedikit lebih lambat dari
b.toString()
sejak JVM perlu pertama unboxBoolean
untukboolean
yang akan lulus sebagai argumen untukBoolean.toString(...)
sementarab.toString()
digunakan ulangprivate boolean value
lapangan diBoolean
objek yang memegang negaranya.sumber
sumber
Jika ini bertujuan untuk mendapatkan nilai "benar" yang konstan, daripada "Benar" atau "BENAR", Anda dapat menggunakan ini:
sumber
Jika Anda mencari cara cepat untuk melakukan ini, misalnya debugging, Anda cukup menggabungkan string kosong ke boolean:
Namun, saya sangat menyarankan menggunakan metode lain untuk penggunaan produksi. Ini adalah solusi cepat sederhana yang berguna untuk debugging.
sumber
System.out.println
untuk debugging sih, kan?Tergantung apa yang Anda maksud dengan "efisien". Dari segi performa, kedua versi sama dengan bytecode yang sama.
sumber
Jika Anda melihat penerapan kedua metode tersebut, keduanya terlihat sama.
String.valueOf (b)
Boolean.toString (b)
Jadi kedua metode tersebut sama-sama efisien.
sumber