Rumah > Java > javaTutorial > teks badan

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

WBOY
Lepaskan: 2023-04-20 21:10:06
ke hadapan
3183 orang telah melayarinya

Melemparkan soalan:

Long a = 4l;
Long b = 4l;
a == b //true
Salin selepas log masuk
Long a = 128l;
Long b = 128l;
a == b //false
Salin selepas log masuk

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);
    }
Salin selepas log masuk

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
Salin selepas log masuk
2 Gunakan sama dengan() dalam Long
Long a = 128l;
Long b = 128l;
a.equals(b);//true
Salin selepas log masuk

Berikut ialah kod sumber kaedah ini:

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

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()) {
             ...;
}
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan