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?

Larutan

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.

Komentar (5)

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.

Komentar (0)

Anda dapat membandingkan nilai panjang/integer tanpa menggunakan equals(). Ini hanya diperlukan ketika Anda membandingkan string, sejauh yang saya tahu.

Komentar (0)