Apa perbedaan antara null
dan ""
(string kosong)?
Saya telah menulis beberapa kode sederhana:
String a = "";
String b = null;
System.out.println(a == b); // false
System.out.println(a.equals(b)); // false
Kedua pernyataan kembali false
. Sepertinya, saya tidak dapat menemukan apa perbedaan yang sebenarnya di antara mereka.
b.equals(a)
- tetapi jangan gunakan==
untuk membandingkan string karena "tidak akan berfungsi" dengan cara lain. Thenull
value (yang berbeda dari string kosong""
, contoh String valid) dapat tidak pernah memiliki metode dipanggil atasnya. Menempatkan "dikenal non-null" (biasanya nilai konstan atau literal) ke sisi kiri kesetaraan adalah "Yoda conditional" atau semacamnya.Jawaban:
"" adalah string yang sebenarnya, meskipun yang kosong.
null, bagaimanapun, berarti bahwa variabel String menunjuk ke nol.
a==b
mengembalikan false karena "" dan null tidak menempati ruang yang sama dalam memori - dengan kata lain, variabel mereka tidak menunjuk ke objek yang sama.a.equals(b)
mengembalikan false karena "" tidak sama dengan nol, jelas.Perbedaannya adalah karena "" merupakan string yang sebenarnya, Anda masih dapat memanggil metode atau fungsi seperti itu
a.length()
a.substring(0, 1)
dan seterusnya.
Jika String sama dengan nol, seperti b, Java akan melempar
NullPointerException
jika Anda mencoba memohon, katakan:b.length()
Jika perbedaan yang Anda tanyakan adalah == versus sama, inilah ini:
== membandingkan referensi, seperti jika saya pergi
Itu akan menghasilkan false karena saya mengalokasikan dua objek yang berbeda, dan a dan b menunjuk ke objek yang berbeda.
Namun,
a.equals(b)
dalam hal ini akan mengembalikan true, karenaequals
untuk Strings akan mengembalikan true jika dan hanya jika argumen String tidak nol dan mewakili urutan karakter yang sama.Namun, berhati-hatilah bahwa Jawa memiliki kasus khusus untuk Strings.
Anda akan berpikir bahwa outputnya adalah
false
, karena seharusnya mengalokasikan dua String yang berbeda. Sebenarnya, Java akan menginternir String literal (yang diinisialisasi seperti a dan b dalam contoh kita). Jadi hati-hati, karena itu bisa memberikan beberapa kesalahan positif tentang cara kerja ==.sumber
intern
telah kedaluwarsa. Anda dapat merujuk ke situs lain untuk membacanya: weblogs.java.net/blog/enicholas/archive/2006/06/…String a = null
dan kemudian saya menambahkannya seperti Stringa+= "example"
, ketika saya mencetaknya, mengapa ditampilkannullexample
jika null bukan String?"num: " + 20
memberi Anda string"num: 20"
. Apakah ini berarti itu20
adalah sebuah string? (bukan,20
adalah angka). Kasus yang sama untuknull
: ini bukan string, tetapi dapat dikonversi menjadi satu jika Anda mencoba menambahkannya.Anda juga dapat memahami perbedaan antara null dan string kosong dengan cara ini:
Gambar asli oleh R. Sato ( @raysato )
sumber
String adalah Obyek dan bisa null
null berarti Objek String tidak dipakai
"" adalah nilai aktual dari String Objek yang dipakai seperti "aaa"
Berikut ini tautan yang mungkin menjelaskan titik itu http://download.oracle.com/javase/tutorial/java/concepts/object.html
sumber
if (mp==null){do something}
.Apa yang dikatakan pernyataan Anda hanya "" tidak sama dengan nol - yang benar. "" adalah string kosong; null berarti tidak ada nilai yang diberikan.
Mungkin lebih mencerahkan untuk mencoba:
"" masih berupa string, artinya Anda dapat memanggil metode dan mendapatkan informasi yang bermakna. null adalah variabel kosong - benar-benar tidak ada di sana.
sumber
Ada perbedaan yang cukup signifikan antara keduanya. String kosong
""
adalah "string yang tidak memiliki karakter di dalamnya." Ini adalah string aktual yang memiliki panjang yang jelas. Semua operasi string standar didefinisikan dengan baik pada string kosong - Anda dapat mengubahnya menjadi huruf kecil, mencari indeks beberapa karakter di dalamnya, dll. String nolnull
adalah "tidak ada string sama sekali." Tidak memiliki panjang karena itu bukan string sama sekali. Mencoba menerapkan operasi string standar apa pun ke string nol akan menyebabkanNullPointerException
saat runtime.sumber
di sini
a is an Object
tapib(null)
ini tidak Obyek itu adalah referensi nullini jawaban saya yang serupa
sumber
a
danb
merupakan referensi.a
adalah referensi dengan objek instantiated.b
adalah referensi tanpa objek instantiated (karenanya istilah "referensi nol").null
nilai dan perbedaan antara objek dan variabel.null berarti nama tersebut tidak merujuk objek apa pun yang dipakai. "" berarti string kosong.
Di sini a mereferensikan beberapa objek yang kebetulan berupa string kosong. b tidak mereferensikan objek apa pun karena null.
sumber
Di Jawa jenis referensi yang diberikan tidak
null
memiliki nilai sama sekali . Sebuah string yang ditugaskan""
memiliki nilai: string kosong, yang berarti string tanpa karakter di dalamnya. Ketika variabel ditugaskannull
itu berarti tidak ada objek yang mendasari jenis, string atau sebaliknya.sumber
"" dan null keduanya berbeda. yang pertama berarti sebagai bagian dari deklarasi variabel string konstanta string telah dibuat dalam kumpulan string dan beberapa memori telah ditetapkan untuk hal yang sama.
Tetapi ketika kita mendeklarasikannya dengan null maka itu baru saja dipakai jvm, tetapi tidak ada memori yang dialokasikan untuk itu. oleh karena itu jika Anda mencoba mengakses objek ini dengan memeriksanya dengan "" - variabel kosong, itu tidak dapat mencegah nullpointerexception. Silakan temukan di bawah ini satu use case.
}
sumber
Referensi ke string kosong
""
menunjuk ke objek di heap - sehingga Anda dapat memanggil metode di atasnya.Tetapi referensi yang menunjuk ke
null
tidak memiliki objek untuk menunjuk di tumpukan dan dengan demikian Anda akan mendapatkanNullPointerException
.sumber
Dari artikel wikipedia pada string kosong .
sumber
String s=null;
String tidak diinisialisasi untuk null. jika ada operasi string yang mencoba itu dapat membuang pengecualian null pointer
String t="null";
Ini adalah string literal dengan nilai string "null" sama seperti t = "xyz". Itu tidak akan membuang pointer nol.
String u="";
Ini sebagai string kosong, Ini tidak akan membuang pointer nol.
sumber
String dapat kosong atau memiliki
null
nilai. Jika sebuah stringnull
, itu tidak merujuk pada apa pun di memori. Cobas.length()>0
. Ini karena jika sebuah string kosong, ia masih mengembalikan panjang 0. Jadi, jika Anda tidak memasukkan apa pun untuk yang sama, maka ia akan terus melanjutkan perulangan karena tidak mendaftarkan string sebagainull
. Sedangkan jika Anda memeriksa panjang, maka itu akan keluar dari lingkaran itu.sumber
Konsep ini dapat lebih dipahami dari matematika. Pernahkah Anda mencoba membagi angka (bukan nol) dengan 0 menggunakan kalkulator misalnya 7/0? Anda akan mendapatkan hasil yang terlihat seperti sesuatu ini:
undefined
,not a number
,null
dll Hal ini berarti bahwa operasi tidak mungkin, untuk beberapa alasan (mari kita meninggalkan alasan-alasan yang akan dibahas hari lain).Sekarang, lakukan ini: 0/7. Anda akan mendapatkan output, 0. Ini berarti operasi itu mungkin dan dapat dieksekusi, tetapi Anda jawabannya hanya 0 karena tidak ada yang tersisa setelah pembagian. Ada output yang valid dan output itu nol.
Dalam contoh pertama, tidak hanya output yang tidak valid, operasi tidak mungkin dilakukan. Ini mirip dengan
null
string di java. Contoh kedua mirip denganempty
string.sumber
Ketika Anda menulis
String a = "";
Itu berarti ada variabel 'a' dari tipe string yang menunjuk ke referensi objek dalam kumpulan string yang memiliki nilai "". Karena variabel
a
memegang referensi objek string yang valid, semua metode string dapat diterapkan di sini.Sedangkan saat Anda menulis
String b = null;
Ini berarti bahwa ada variabel
b
tipe string yang menunjuk ke referensi yang tidak diketahui . Dan setiap operasi pada referensi yang tidak diketahui akan menghasilkanNullPointerException
.Sekarang, mari kita evaluasi ekspresi di bawah ini.
sumber
Secara sederhana,
"" adalah String kosong
null adalah Variabel String kosong .
sumber
Perbedaan antara string kosong & kosong. Misalnya: Anda memiliki variabel bernama x. Jika Anda menulis dalam JS,
var x = "";
ini berarti bahwa Anda telah menetapkan nilai string kosong (panjangnya 0). Sebenarnya ini seperti sesuatu tetapi yang tidak merasakan apa-apa :) Di sisi lain,
var y = null;
ini berarti Anda belum memberikan nilai pada y yang diucapkan dengan jelas dengan menuliskan null to y pada saat deklarasi. Jika Anda menulis y.length; itu akan melempar kesalahan yang menunjukkan bahwa tidak ada nilai yang ditetapkan untuk y dan sebagai hasilnya tidak dapat membaca panjang y.
sumber
Gambar ini dapat membantu Anda memahami perbedaan.
Gambar dikumpulkan dari ProgrammerHumor
sumber
"Saya menyebutnya kesalahan miliaran dolar saya. Itu adalah penemuan referensi nol pada tahun 1965" - https://en.wikipedia.org/wiki/Tony_Hoare
Sehubungan dengan dunia nyata keduanya dapat dianggap sama. Itu hanya sintaks dari bahasa pemrograman yang menciptakan perbedaan antara dua seperti yang dijelaskan oleh orang lain di sini. Ini hanya menciptakan overhead seperti ketika memeriksa / membandingkan apakah variabel string memiliki sesuatu, Anda harus terlebih dahulu memeriksa apakah itu bukan nol dan kemudian string aktual membandingkan yaitu dua perbandingan. Ini adalah pemborosan daya pemrosesan untuk setiap perbandingan string.
Objects.equals () memeriksa null sebelum memanggil .equals ().
sumber
sebagai rasa ingin tahu
sumber