Rumah  >  Artikel  >  Java  >  Cara Selamat Menukar panjang kepada int dalam Java: `toIntExact` vs Explicit Checking?

Cara Selamat Menukar panjang kepada int dalam Java: `toIntExact` vs Explicit Checking?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-26 22:11:03180semak imbas

How to Safely Convert a long to an int in Java:  `toIntExact` vs Explicit Checking?

Mengelakkan Ralat Pemangkasan Apabila Menghantar panjang ke int

Apabila menukar nilai panjang kepada int di Java, adalah penting untuk memastikan penukaran tidak membawa kepada kehilangan maklumat. Satu cara untuk mencapai ini adalah melalui semakan eksplisit, seperti yang ditunjukkan dalam pelaksanaan yang diberikan:

<code class="java">public static int safeLongToInt(long l) {
    int i = (int)l;
    if ((long)i != l) {
        throw new IllegalArgumentException(l + " cannot be cast to int without changing its value.");
    }
    return i;
}</code>

Walau bagaimanapun, sejak Java 8, penyelesaian yang lebih idiomatik telah diperkenalkan:

Matematik .toIntExact()

Kaedah ini membenarkan penukaran long-to-int yang selamat dengan membuang ArithmeticException apabila limpahan berlaku:

<code class="java">import java.lang.Math;
...
long foo = 10L;
int bar = Math.toIntExact(foo);</code>

Java 8 juga termasuk kaedah "tepat" yang serupa untuk pelbagai operasi aritmetik, memastikan ketepatan dan mengelakkan kehilangan ketepatan yang tidak dijangka:

  • Math.incrementExact(panjang)
  • Math.subtractExact(panjang, panjang)
  • Math .decrementExact(long)
  • Math.negateExact(long)
  • Math.subtractExact(int, int)

Dengan menggunakan kaedah ini, pembangun boleh membuang panjang dengan yakin nilai kepada int tanpa risiko kehilangan data atau pengecualian masa jalan akibat limpahan.

Atas ialah kandungan terperinci Cara Selamat Menukar panjang kepada int dalam Java: `toIntExact` vs Explicit Checking?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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