Metode equals() di Java bekerja secara tidak terduga pada tipe data Long
Pertama-tama, mari kita lihat ekspresi berikut ini dalam bahasa Java.
Integer temp = new Integer(1);
System.out.println(temp.equals(1));
if(temp.equals(1))
{
System.out.println("The if block executed.");
}
Semua pernyataan ini bekerja dengan baik. Tidak ada pertanyaan tentang hal itu. Ekspresi temp.equals(1)
dievaluasi menjadi true
seperti yang diharapkan dan satu-satunya pernyataan di dalam blok if
dieksekusi sebagai konsekuensinya.
Sekarang, ketika saya mengubah tipe data dari Integer
menjadi Long
, pernyataan temp1.equals(1)
secara tidak terduga dievaluasi menjadi false
sebagai berikut.
Long temp1 = new Long(1);
System.out.println(temp1.equals(1));
if(temp1.equals(1))
{
System.out.println("The if block executed.");
}
Ini adalah pernyataan yang setara dengan yang disebutkan dalam cuplikan sebelumnya, hanya saja tipe datanya telah diubah dan perilakunya berlawanan.
Ekspresi temp1.equals(1)
dievaluasi menjadi false
dan akibatnya, satu-satunya pernyataan dalam blok if
tidak dieksekusi, yang merupakan kebalikan dari pernyataan sebelumnya. Bagaimana caranya?
Anda sedang membandingkan sebuah
Long
dengan sebuahint
. Javadoc untukjava.lang.Long#equals
mengatakan bahwa metodeequals
Sebagai gantinya, cobalah
System.out.println(new Long(1).equals(1L));
Sekarang Anda membandingkanLong
denganLong
dan bukanLong
denganInteger
, ini akan mencetaktrue
.Nilai literal
1
bukanlah sebuahpanjang
, melainkan sebuahint
. Cobalah kode di atas dengan ini sebagai gantinya:Dan
Seperti yang Anda lihat, meletakkan
L
setelah nilai literal1
menunjukkan bahwa itu adalahpanjang
, dan kemudian perbandingan bekerja seperti yang diharapkan.Anda dapat membandingkan nilai panjang/integer tanpa menggunakan equals(). Ini hanya diperlukan ketika Anda membandingkan string, sejauh yang saya tahu.