"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني إرسال مسافة طويلة بأمان إلى Int في Java 8 وما بعدها؟

كيف يمكنني إرسال مسافة طويلة بأمان إلى Int في Java 8 وما بعدها؟

تم النشر بتاريخ 2024-11-15
تصفح:715

How Can I Safely Cast a Long to an Int in Java 8 and Beyond?

التحويل الآمن لفترة طويلة إلى Int في Java (تم التحديث لـ Java 8)

في Java، يمكن أن يؤدي التحويل من long إلى int إلى في فقدان البيانات. لمعالجة هذه المشكلة، يعد اتباع نهج آمن واصطلاحي أمرًا ضروريًا.

طريقة Math.toIntExact() في Java 8

قبل Java 8، كانت الطريقة الموصى بها للإرسال بأمان كان الأمر طويلًا بالنسبة إلى int هو التحقق من النتيجة بحثًا عن فقدان محتمل للمعلومات. يتضمن ذلك مقارنة نتيجة الإرسال بالقيمة الطويلة الأصلية:

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;
}
&&&]ومع ذلك، في Java 8 والإصدارات الأحدث، يتم حل مشكلة ArithmeticException: Math.toIntExact()‎. &]

استيراد ثابت java.lang.Math.toIntExact; طويل فو = 10 لتر؛ int bar = toIntExact(foo);
import static java.lang.Math.toIntExact;

long foo = 10L;
int bar = toIntExact(foo);
طرق إضافية آمنة لتجاوز السعة في Java 8

بالإضافة إلى toIntExact()، قدمت Java 8 العديد من الطرق الأخرى الآمنة لتجاوز السعة التي تنتهي بـ "بالضبط". تقوم هذه الطرق بتنفيذ عمليات مثل الجمع والطرح والنفي والتناقص أثناء التحقق من التجاوزات المحتملة:

Math.incrementExact(long)
  • Math.subtractExact(long, long)
  • Math.decrementExact(long)
  • Math.negateExact(long)
  • Math.subtractExact(int, int)
  • باستخدام Math.toIntExact () وهذه الطرق الإضافية الآمنة للتجاوز، يمكنك إرسال قيم طويلة بأمان إلى int وتنفيذ العمليات الحسابية دون المخاطرة بفقدان المعلومات.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3