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 sebuah int
. Javadoc untuk java.lang.Long#equals
mengatakan bahwa metode equals
Membandingkan objek ini dengan objek yang ditentukan. Hasilnya benar jika dan hanya jika argumennya tidak nol dan merupakan objek Long yang berisi nilai panjang yang sama dengan objek ini.
Sebagai gantinya, cobalah System.out.println(new Long(1).equals(1L));
Sekarang Anda membandingkan Long
dengan Long
dan bukan Long
dengan Integer
, ini akan mencetak true
.
Nilai literal 1
bukanlah sebuah panjang
, melainkan sebuah int
. Cobalah kode di atas dengan ini sebagai gantinya:
System.out.println(temp1.equals(1L));
Dan
if (temp1.equals(1L))
Seperti yang Anda lihat, meletakkan L
setelah nilai literal 1
menunjukkan bahwa itu adalah panjang
, dan kemudian perbandingan bekerja seperti yang diharapkan.