Rumah >Java >javaTutorial >Bagaimana untuk menentukan sama ada dua objek Panjang adalah sama di Jawa?

Bagaimana untuk menentukan sama ada dua objek Panjang adalah sama di Jawa?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBke hadapan
2023-04-20 21:10:063256semak imbas

Melemparkan soalan:

Long a = 4l;
Long b = 4l;
a == b //true
Long a = 128l;
Long b = 128l;
a == b //false

Jika nilai Long adalah antara [-127,128], tidak mengapa untuk menggunakan "==" untuk menentukan sama ada ia adalah sama bukan dalam julat ini, ia "==" tidak boleh digunakan, sebabnya adalah seperti yang dijelaskan dalam kod sumber:

public static Long valueOf(long l) {
        final int offset = 128;
        if (l >= -128 && l <= 127) { // will cache
            return LongCache.cache[(int)l + offset];
        }
        return new Long(l);
    }

Jika ia bukan antara [-127,128], objek baharu akan dibuat , dan secara semula jadi "==" dua objek berbeza Hasilnya mestilah palsu.

Penyelesaian:

1 Gunakan longValue() dalam Long untuk penukaran
Long a = 128l;
Long b = 128l;
a.longValue() == b.longValue() //true
2 Gunakan sama dengan() dalam Long
Long a = 128l;
Long b = 128l;
a.equals(b);//true

Berikut ialah kod sumber kaedah ini:

public boolean equals(Object obj) {
        if (obj instanceof Long) {
            return value == ((Long)obj).longValue();
        }
        return false;
    }

Perangkap dalam membandingkan dua jenis Long

Secara umumnya, "==" digunakan untuk membandingkan dua jenis data asas , Jenis panjang perbandingan jarang digunakan.

Walau bagaimanapun, semasa saya menulis projek baru-baru ini, saya menemui dua perbandingan jenis Long Pada masa itu, saya menggunakan sama dengan berganda Namun, apabila menyahpepijat, saya mendapati bahawa apabila kod itu dilaksanakan untuk membandingkan kedua-duanya Jenis panjang, ia tidak memasuki badan penghakiman, dan kemudian mencari isu berkaitan dalam talian Ia sebenarnya sangat mudah, tetapi jika anda tidak tahu, mudah untuk jatuh ke dalam perangkap.

Penyelesaian adalah seperti berikut:

Anda boleh membuat dua pembolehubah jenis Long memanggil kaedah ==longValue()== masing-masing.

Kod:

Long a=...;
Long b=...;
if (a.longValue() == b.longValue()) {
             ...;
}

Sebenarnya, Long adalah sejenis kelas pembungkusan data java Perkara di atas adalah kes di mana kelas pembungkusan Long ditukar kepada jenis data asas berikut ialah pembongkaran kelas pembungkusan data lain Penukaran kepada jenis data asas:

Integer perlu ditukar kepada int, dan kaedah intValue() perlu dipanggil

Double perlu. ditukar kepada berganda, dan kaedah doubleValue() perlu dipanggil

Float untuk menukar Untuk float, anda perlu memanggil kaedah floatValue()

Atas ialah kandungan terperinci Bagaimana untuk menentukan sama ada dua objek Panjang adalah sama di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam