۱۳ تیر ۱۴۰۴

Techboy

اخبار و اطلاعات روز تکنولوژی

آنچه شما باید در مورد کلاس های بسته بندی جاوا بدانید

از زمان جاوا 21 ، کلاس های بسته بندی نقش فزاینده ای در سیستم نوع جاوا ایفا کرده اند. در اینجا همه چیزهایی که باید در مورد به روزرسانی های موضوعات مجازی ، تطبیق الگوی و موارد دیگر بدانید وجود دارد.

از زمان جاوا ۲۱ ، کلاس های بسته بندی نقش فزاینده ای در سیستم نوع جاوا ایفا کرده اند. در اینجا همه چیزهایی که باید در مورد به روزرسانی های موضوعات مجازی ، تطبیق الگوی و موارد دیگر بدانید وجود دارد.

آیا تا به حال فکر کرده اید که چگونه java یکپارچه انواع داده های بدوی خود را با برنامه نویسی شی گرا ترکیب می کند؟ کلاسهای بسته بندی را وارد کنید ، یک ویژگی مهم اما غالباً نادیده گرفته شده جاوا. این کلاس های ویژه شکاف بین انواع ابتدایی (مانند int و double ) و اشیاء را به خود اختصاص می دهد ، و شما را قادر می سازد تا شماره ها را در مجموعه ها ذخیره کنید ، مقادیر تهی را کنترل کنید ، از ژنرال ها استفاده کنید و حتی داده های پردازش را در ویژگی های مدرن مانند تطبیق الگوی.

انجام دهید.

آیا شما با یک لیست کار می کنید یا اینکه یک double را از یک رشته جدا می کنید ، کلاس های بسته بندی جاوا این همه را امکان پذیر می کند. در این مقاله ، ما با کلاس های بسته بندی در جاوا ۲۱ ، نسخه فعلی LTS (پشتیبانی بلند مدت) جاوا روبرو خواهیم شد. من همچنین نکات ، مثال ها و تله هایی را ارائه می دهم تا هنگام کار با کلاس های بسته بندی در برابر () و hashcode ()

.

قبل از اینکه با کلاسهای بسته بندی در جاوا ۲۱ به آنچه جدید است شیرجه بزنیم ، اجازه دهید یک بررسی سریع انجام دهیم.

تعریف و هدف کلاسهای بسته بندی

کلاسهای بسته بندی جاوا کلاسهای نهایی و تغییر ناپذیر هستند که مقادیر ابتدایی را درون اشیاء "بسته بندی می کنند". هر نوع بدوی دارای یک کلاس بسته بندی مربوطه است:

این کلاس های بسته بندی چندین هدف را ارائه می دهند:

  • امکان استفاده از بدوی در جایی که اشیاء مورد نیاز هستند (به عنوان مثال ، در مجموعه ها و ژنرال ها) استفاده می شود.
  • ارائه روش های ابزار برای تبدیل و دستکاری نوع.
  • پشتیبانی از مقادیر تهی ، که بدوی ها نمی توانند انجام دهند.
  • تسهیل بازتاب و سایر عملیات شی گرا.
  • امکان رسیدگی به داده ها از طریق روش های شیء.

تکامل کلاس های بسته بندی از طریق نسخه های جاوا

کلاس های بسته بندی در طول تاریخ جاوا تحول قابل توجهی را پشت سر گذاشته اند:

  • Java 1.0 از طریق Java 1.4 کلاس های بسته بندی اساسی را با بوکس دستی و جعبه سازی معرفی کرد.
  • Java 5 Autoboxing و بدون بوکس را اضافه کرد ، به طور چشمگیری کد را ساده کرد.
  • کلاسهای بسته بندی شده Java 8 با روش های جدید ابزار و سازگاری رابط عملکردی.
  • سازندگان بسته بندی شده جاوا ۹ به نفع روشهای کارخانه.
  • جاوا ۱۶ تا ۱۷ هشدارهای استهلاک را تقویت کرد و برای حذف سازندگان بسته بندی آماده شد.
  • جاوا ۲۱ تطبیق الگوی بهبود یافته با بسته بندی ها و عملکرد آنها را برای موضوعات مجازی بیشتر بهینه کرد.

این تکامل منعکس کننده تعادل مداوم جاوا بین سازگاری عقب مانده و ادغام پارادایم های برنامه نویسی مدرن است.

کلاسهای بسته بندی در سیستم نوع جاوا ۲۱

با شروع از جاوا ۲۱ ، کلاس های بسته بندی نقش فزاینده ای در سیستم نوع جاوا ایفا کرده اند:

  • تطبیق الگوی پیشرفته برای سوئیچ و نمونه یکپارچه با انواع بسته بندی کار می کند.
  • ادغام طبیعی با الگوهای ضبط برای دستکاری داده های پاک کننده.
  • تعامل بهینه شده بین انواع بسته بندی و سیستم نخ مجازی.
  • استنتاج نوع بهبود یافته برای بسته بندی ها در عبارات لامبدا و منابع روش.

رفتار بسته بندی همچنین به عنوان زمینه برای project project valhalla's ، rgb (rgb (rgb (s-sper)) فاصله حروف: طبیعی-سقوط: سقوط ؛ "> انواع ارزش.

کلاس های بسته بندی در جاوا ۲۱ نقش اساسی پل خود را ضمن پذیرش ویژگی های زبان مدرن حفظ می کنند ، و آنها را به یک مؤلفه اساسی توسعه جاوا معاصر تبدیل می کند.

انواع داده های بدوی و کلاس های بسته بندی در جاوا ۲۱

جاوا یک کلاس بسته بندی را برای هر نوع بدوی فراهم می کند و یک نمایش کامل شیء گرا از ارزشهای اساسی زبان ایجاد می کند. در اینجا یک بررسی سریع از انواع ابتدایی و کلاس بسته بندی مربوطه آنها ، همراه با یک مثال آفرینش آمده است:

td> کاراکتر. valueof ('a')

هر کلاس بسته بندی شی را گسترش می دهد و رابط هایی مانند قابل مقایسه و serializable را پیاده سازی می کند. کلاس های بسته بندی عملکردهای اضافی را فراتر از همتایان ابتدایی خود ارائه می دهند ، و این امکان را برای آنها فراهم می کند تا با روش برابر با روش () مقایسه شوند.

روش های کلاس بسته بندی

کلاسهای بسته بندی جاوا مجموعه ای غنی از روشهای ابزار را فراتر از نقش اصلی آنها در ابتدایی بوکس ارائه می دهد. این روشها روشهای مناسبی برای تجزیه رشته ها ، تبدیل بین انواع ، انجام عملیات ریاضی و رسیدگی به مقادیر خاص ارائه می دهند.

  • تجزیه رشته: integer.parseint ("42") ، double.parsedouble ("3.14")
  • تبدیل از نوع متقاطع: intvalue.bytevalue () ، intvalue.doublevalue ()
  • تبدیل پایه: integer.parseint ("2a" ، ۱۶) ، integer.tostring (42 ، ۲)
  • عملیات بدون امضا: Integer.tounsignedlong ()
  • توابع حداقل/حداکثر: Integer.min (a ، b) ، long.max (x ، y)
  • مقایسه: double.compare (d1 ، d2)
  • عملیات ریاضی: Integer.sum (a ، b) ، integer.divideunsigned (a ، b)
  • دستکاری بیت: integer.bitcount () ، integer.reverse ()
  • بررسی ارزش ویژه: double.isnan () ، float.isfinite ()

روش مهم دیگری که باید در مورد آن بدانید مقدار () است. سازندگان در جاوا ۹ مستهلک شدند و برای حذف در جاوا ۱۶ مشخص شدند. یکی از راه های مدیریت بدون سازنده استفاده از روشهای کارخانه است. به عنوان مثال ، integer.valueof (42) به جای عدد صحیح جدید (۴۲) . مزایای مقدار () شامل:

  • حافظه پنهان حافظه برای بسته بندی های بدوی (-۱۲۸ تا ۱۲۷ برای Integer ، کوتاه ، long ، و بایت ؛ ۰-۱۲۷ برای کاراکتر ؛ constants true/false for boolean )).
  • float و double به دلیل محدوده ارزش نقطه شناور آنها حافظه پنهان نکنید.
  • برخی از روش های کارخانه رفتار خوبی برای ورودی های تهی دارند.

به روزرسانی های کلاس بسته بندی برای تطبیق الگوی و موضوعات مجازی

کلاسهای بسته بندی

در جاوا ۲۱ برای تطبیق الگوی و موضوعات مجازی بهینه شدند. تطبیق الگوی در جاوا به شما امکان می دهد تا ضمن استخراج اجزای آنها ، ساختار و انواع اشیاء را آزمایش کنید. جاوا ۲۱ به طور قابل توجهی تطبیق الگوی را برای بیانیه های سوئیچ ، به ویژه در کلاس های بسته بندی افزایش می دهد. همانطور که مثال زیر نشان می دهد ، تطبیق الگوی پیشرفته هنگام دست زدن به داده های چند شکل ، کد مختصر تر و ایمن تر را امکان پذیر می کند:


public String describeNumber(Number n) {
    return switch (n) {
        case Integer i when i < 0 -> "Negative integer: " + i;
        case Integer i -> "Positive integer: " + i;
        case Double d when d.isNaN() -> "Not a number";
        case Double d -> "Double value: " + d;
        case Long l -> "Long value: " + l;
        case null -> "No value provided";
        default -> "Other number type: " + n.getClass().getSimpleName();
    };
}

پیشرفت های کلیدی برای تطبیق الگوی شامل موارد زیر است:

  • کنترل تهی : یک مورد صریح برای مقادیر تهی مانع از غیر منتظره nullpointerexception s.
  • الگوهای نگهبان : بند هنگامی که تطبیق مشروط پیشرفته را امکان پذیر می کند.
  • نوع پالایش : کامپایلر اکنون نوع تصفیه شده در هر شاخه مورد را درک می کند.
  • الگوهای تو در تو : تطبیق الگوی در حال حاضر از الگوهای پیچیده ای که شامل اشیاء بسته بندی شده تو در تو است پشتیبانی می کند.
  • بررسی جامع : اکنون می توانید یک تأیید کامپایلر دریافت کنید که همه انواع ممکن تحت پوشش قرار گرفته است.

این ویژگی ها باعث می شود کلاس بسته بندی از نوع بسته بندی بیشتر و بیانگر ، به ویژه در کدهایی که داده های اولیه و شیء مختلط را پردازش می کنند ، استفاده کند.

ویژگی های موضوعات مجازی جاوا ۲۱ همچنین با کلاسهای بسته بندی از چند طریق مهم در تعامل است. برای یک ، همانطور که در اینجا نشان داده شده است ، سربار بوکس در زمینه های همزمان کاهش یافته است:


// Efficiently processes a large stream of numbers using virtual threads
void processNumbers(List<Integer> numbers) {
    try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
        numbers.forEach(num -> 
            executor.submit(() -> processNumber(num))
        );
    }
}

به روزرسانی های اضافی برای موضوعات مجازی شامل موارد زیر است:

  • JVM ارتباطات نخ را شامل کلاس های بسته بندی شده است ، که باعث کاهش سربار در برنامه ریزی و دستیابی به موضوع مجازی می شود.
  • ذخیره سازی نخ محلی نیز بهبود یافته است. انبارهای کلاس بسته بندی (-۱۲۸ تا ۱۲۷ برای عدد صحیح و غیره) به جای هر موضوع مجازی ، در هر موضوع حامل حفظ می شوند و از استفاده از حافظه غیر ضروری در سناریوهای پرنعمت بالا جلوگیری می کنند.
  • حفظ هویت نیز اضافه شده است. در یک موضوع مجازی واحد ، هویت بسته بندی مناسب برای همگام سازی و عملیات حساس به هویت حفظ می شود.

سرانجام ، کلاسهای بسته بندی برای بهبود عملکرد آنها با موضوعات مجازی بهینه شدند:

  • موضوعات مجازی برای عملیات مختلف از پیاده روی پشته استفاده می کنند. کلاس های بسته بندی این تعامل را بهینه می کنند.
  • کلاس های بسته بندی در صف برنامه ریزی موضوع مجازی از پیشرفت های کارایی حافظه بهره مند می شوند.
  • خطرات پین کردن موضوع از طریق عملیات بهینه سازی شده بهینه کاهش می یابد.
  • الگوهای همزمانی ساختاری با ترکیبات ارزش کلاس بسته بندی یکپارچه کار می کنند.

ادغام بین کلاسهای بسته بندی و موضوعات مجازی ، اطمینان می دهد که کلاسهای بسته بندی مفید خود را در مدلهای جدید برنامه نویسی همزمان معرفی شده در جاوا ۲۱ حفظ می کنند. تغییرات شرح داده شده در اینجا اطمینان می دهد که کلاس های بسته بندی بدون مجازات های عملکردی که در غیر این صورت ممکن است در برنامه های پر سر و صدا و دارای مجازی انجام شود ، ادامه می یابد.

برابر است و اجرای hashcode در کلاس های بسته بندی

کلاس های بسته بندی بر روش برابر () برای انجام مقایسه های مبتنی بر ارزش به جای مقایسه مرجع مورد استفاده توسط object.equals () غلبه می کنند. در یک مقایسه مبتنی بر مقدار ، دو شیء بسته بندی در صورتی که دارای همان مقدار بدوی باشند ، بدون در نظر گرفتن اشیاء مجزا در حافظه ، برابر هستند. این نوع مقایسه مزایای ویژگی نوع و ایمنی تهی را دارد:

  • ویژگی نوع : مقایسه فقط اگر هر دو شی از نوع بسته بندی یکسان باشند ، درست برمی گردد.
  • ایمنی تهی : کلیه پیاده سازی های بسته بندی با خیال راحت مقایسه های تهی را انجام می دهند.

در مثال زیر ، Integer.Equals () بررسی می کند که آیا آرگومان یک عدد صحیح است و دارای همان مقدار int است:


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

چند مورد استثنایی وجود دارد که باید توجه داشته باشید:

  • شناور و دو برابر : این بسته بندی ها مقادیر خاصی مانند نان را به طور مداوم کنترل می کنند. (NAN برابر با NAN در برابر با () ، برخلاف مقایسه بدوی.)
  • autoboxing : هنگام مقایسه با == به جای برابر () ، autoboxing می تواند به دلیل ذخیره مقادیر خاص منجر به رفتار غیر منتظره شود.

بسته بندی ها در مجموعه های مبتنی بر هش

کلاسهای بسته بندی

hashcode () را به شکلی که مستقیماً با مقادیر ابتدایی آنها مطابقت داشته باشد ، پیاده سازی می کنند ، و از رفتار مداوم در مجموعه های مبتنی بر هش اطمینان می دهند. این اجرای برای مجموعه هایی مانند hashmap ، hashset و convurrenthashmap بسیار مهم است. جزئیات اجرای زیر را در نظر بگیرید ، سپس به چند نمونه خواهیم پرداخت.

  • Integer ، کوتاه و بایت : مقدار بدوی را مستقیماً به عنوان کد هش برگردانید.
  • طولانی : xor 32 بیت پایین با ۳۲ بیت فوقانی: ((int) (مقدار ^ (مقدار >>> ۳۲))).
  • float : تبدیل به بیت های خام با float.floattointbits () برای رسیدگی به مقادیر ویژه مانند nan .
  • double : به بیت های خام تبدیل شوید ، سپس از استراتژی طولانی در بیت های حاصل استفاده کنید.
  • کاراکتر : نقطه کد یونیکد را به عنوان کد هش برگردانید.
  • boolean : بازگشت ۱۲۳۱ برای درست یا ۱۲۳۷ برای نادرست (مقادیر دلخواه اما سازگار).

استفاده از بسته بندی ها در مجموعه های مبتنی بر هش چندین مزیت دارد:

  • عملکرد : مجموعه های مبتنی بر هش به کدهای هش به خوبی توزیع شده برای عملکرد O (1) متکی هستند.
  • سازگاری : قرارداد hashcode () برای تولید کدهای هش مساوی ، به اشیاء مساوی نیاز دارد ، که کلاس های بسته بندی را تضمین می کنند.
  • دست زدن به ارزش ویژه : رسیدگی مناسب موارد لبه مانند NAN در انواع نقطه شناور (دو مقدار NAN علی رغم اینکه با برابر نیست () برابر نیست ، در کد هش برابر است.
  • توزیع : پیاده سازی ها برای به حداقل رساندن برخورد هش برای الگوهای ارزش مشترک طراحی شده اند.
  • تغییر ناپذیری : از آنجا که اشیاء بسته بندی تغییر ناپذیر هستند ، کدهای هش آنها را می توان با خیال راحت ذخیره کرد و پس از اولین محاسبه ، بهبود عملکرد.

این اجرای دقیق تضمین می کند که کلاسهای بسته بندی به طور قابل اعتماد به عنوان کلیدهای موجود در مجموعه های مبتنی بر هش ، یک مورد استفاده مشترک در برنامه های جاوا است.

the == در مقابل .equals () تله بسته بندی

من بسیاری از اشکالات ناشی از مقایسه اشیاء بسته بندی با == را به جای .equals () دیده ام. این یک جاوا Gotcha کلاسیک است که حتی توسعه دهندگان را نیز نیش می زند. شما می توانید در اینجا ببینید که چه چیزی آن را بسیار مشکل می کند:


Integer a = 100;
Integer b = 100;
System.out.println(a == b);      // Prints: true

Integer c = 200;
Integer d = 200;
System.out.println(c == d);      // Prints: false (Wait, what?)

رفتار گیج کننده اتفاق می افتد زیرا جاوا در داخل ذخیره داخلی عدد صحیح اشیاء برای مقادیر مشترک (به طور معمول -۱۲۸ تا ۱۲۷). در این محدوده ، جاوا از همان اشیاء استفاده می کند و خارج از محدوده حافظه نهان ، اشیاء جدیدی دریافت می کنید.

به همین دلیل قانون طلایی ساده است: همیشه هنگام مقایسه اشیاء بسته بندی ، از . equals () استفاده کنید. این روش به طور مداوم برابری ارزش را به جای هویت شی بررسی می کند:


// This works reliably regardless of caching
if (wrapperA.equals(wrapperB)) {
    // Values are equal
}

تله بدون بوکس تهی

توسعه دهندگان وقت زیادی را در تلاشند تا منشأ گیج کننده nullpointerexception را مانند آنچه در اینجا نشان داده شده است ، هدر دهند.


Integer wrapper = null;
int primitive = wrapper; // Throws NullPointerException at runtime

این کد به ظاهر بی گناه بدون هشدار کامپایل می شود اما در زمان اجرا خراب می شود. هنگامی که جاوا سعی می کند یک بسته بندی تهی را به معادل بدوی خود منتقل کند ، سعی می کند روش هایی مانند intvalue () را در یک مرجع تهی فراخوانی کند ، و در نتیجه یک nullpointerexception .

این مسئله به ویژه خطرناک است زیرا از تلفیقی عبور می کند ، خطا فقط در حین اجرای اجرا می شود و معمولاً با پارامترهای روش ، نتایج پایگاه داده و پردازش جمع آوری رخ می دهد. برای محافظت از کد خود ، می توانید از استراتژی های دفاعی زیر استفاده کنید:

  • بررسی صفر صریح ؛ به عنوان مثال ، int اولیه = (بسته بندی! = تهی)؟ بسته بندی: ۰ ؛
  • تطبیق الگوی جاوا ۲۱ ؛ به عنوان مثال ، مقدار int = (نمونه بسته بندی INTEGER I)؟ i: 0 ؛
  • مقادیر پیش فرض را ارائه دهید. به عنوان مثال ، int safe = اختیاری. ofnullable (بسته بندی) .orelse (0) ؛

همیشه هنگام تبدیل بین اشیاء بسته بندی و بدوی محتاط باشید ، به خصوص هنگام کار با داده هایی که ممکن است حاوی مقادیر تهی از منابع خارجی یا نمایش داده های پایگاه داده باشد.

برای کسب اطلاعات بیشتر در مورد تله بدون جعبه NULL ، می توانید Java Challenger من را ببینید در اینجا .

هر توسعه دهنده جاوا احتمالاً کد نوشتاری مانند " اگر (دما> ۱۰۰) " را در مقطعی نوشته است. اما چه زمانی باید بررسی کنید که آیا مقدار بیش از حداکثر ظرفیت یک عدد صحیح است؟ کدگذاری سخت ۲۱۴۷۴۸۳۶۴۷ یک دستور العمل برای اشکالات است.

در عوض ، می توانید از کلاس های بسته بندی با ثابت های داخلی استفاده کنید:


// This is clear and self-documenting
if (calculatedValue > Integer.MAX_VALUE) {
    logger.warn("Value overflow detected!");
}

مفیدترین ثابت ها در دو دسته قرار می گیرند.

محدودیت های عددی به جلوگیری از اشکالات سرریز کمک می کند:

  • integer.max_value و integer.min_value .
  • long.max_value هنگامی که به دامنه های بزرگتر نیاز دارید.

ویژه های شناور مواردی از موارد لبه:

  • double.nan برای نتایج "نه یک عدد".
  • double.positive_infinity هنگامی که شما نیاز به نمایندگی دارید.

من هنگام کار با محاسبات مالی یا پردازش داده های علمی که در آن مقادیر خاص مشترک هستند ، این موارد را به ویژه مفید دانستم.

حافظه و تأثیر عملکرد کلاسهای بسته بندی

درک حافظه و پیامدهای عملکرد بسته بندی ها بسیار مهم است. برای شروع ، هر شیء بسته بندی به ۱۶ بایت هدر نیاز دارد: ۱۲ بایت برای هدر شیء و ۴ برای مرجع شی. ما همچنین باید برای ذخیره واقعی ارزش اولیه (به عنوان مثال ، ۴ بایت برای Integer ، ۸ برای طولانی و غیره) حساب کنیم. سرانجام ، منابع شیء در مجموعه ها لایه دیگری از استفاده از حافظه را اضافه می کنند ، و استفاده از اشیاء بسته بندی در مجموعه های بزرگ نیز به طور قابل توجهی حافظه را در مقایسه با آرایه های ابتدایی افزایش می دهد.

ملاحظات عملکرد نیز وجود دارد. برای یک ، با وجود بهینه سازی JIT ، بوکس مکرر و جعبه جعبه در حلقه های محکم می تواند بر عملکرد تأثیر بگذارد. از طرف دیگر ، بسته بندی هایی مانند Integer حافظه نهان معمولاً (-۱۲۸ تا ۱۲۷ به طور پیش فرض) ، باعث کاهش ایجاد شی می شوند. علاوه بر این ، JVM های مدرن گاهی اوقات می توانند تخصیص بسته بندی را به طور کامل از بین ببرند ، هنگامی که آنها از مرزهای "فرار" نمی کنند. Project Valhalla قصد دارد با معرفی ژنرال های تخصصی و اشیاء ارزش ، این ناکارآمدی ها را برطرف کند.

بهترین دستورالعمل های عملی زیر را برای کاهش عملکرد و تأثیر حافظه کلاسهای بسته بندی در نظر بگیرید:

  • از انواع ابتدایی برای کد عملکرد-مهم و ساختار داده های بزرگ استفاده کنید.
  • کلاسهای بسته بندی اهرم را در صورت نیاز به رفتار شی (به عنوان مثال ، مجموعه ها و باطل بودن).
  • کتابخانه های تخصصی مانند مجموعه های Eclipse را برای مجموعه های بزرگی از بدوی "بسته بندی شده".
  • در نظر بگیرید.

  • در مورد مقایسه هویت ( == ) در مورد اشیاء بسته بندی محتاط باشید.
  • همیشه از روش object برابر () برای مقایسه بسته بندی ها استفاده کنید.
  • مشخصات قبل از بهینه سازی ، زیرا رفتار JVM با بسته بندی ها همچنان به پیشرفت خود ادامه می دهد.

در حالی که کلاس های بسته بندی در مقایسه با بدوی ، سربار را تحمل می کنند ، تکامل مداوم جاوا همچنان ضمن حفظ مزایای الگوی شی گرا ، همچنان این شکاف را محدود می کند.

بهترین شیوه های عمومی برای کلاس های بسته بندی

درک زمان استفاده از انواع ابتدایی در مقابل کلاسهای بسته بندی برای نوشتن کد کارآمد و قابل حفظ در جاوا ضروری است. در حالی که بدوی ها عملکرد بهتری را ارائه می دهند ، کلاس های بسته بندی انعطاف پذیری را در سناریوهای خاص مانند رسیدگی به مقادیر تهی یا کار با انواع عمومی جاوا ارائه می دهند. به طور کلی ، می توانید این دستورالعمل ها را دنبال کنید:

از ابتدایی استفاده کنید برای:

  • متغیرهای محلی
  • پیشخوان ها و شاخص های حلقه
  • کد بحرانی عملکرد
  • مقادیر بازگشت (وقتی تهی معنی دار نیست)

از کلاس های بسته بندی استفاده کنید:

  • زمینه های کلاس که می توانند تهی شوند
  • مجموعه های عمومی (به عنوان مثال ، لیست )
  • مقادیر بازگشت (وقتی تهی معنی دارد)
  • پارامترهای موجود در ژنریک ها
  • هنگام کار با بازتاب

نتیجه گیری

کلاسهای بسته بندی جاوا یک پل اساسی بین انواع ابتدایی و اکوسیستم شی گرا جاوا است. از منشأ آنها در جاوا ۱.۰ به پیشرفت در javion 21 ، این کلاس های ناسازگار در مورد غنی سازی های ناسازگار و غنی سازی های ناشایست را به دست می آورند. محاسبه پیاده سازی های دقیق آنها رفتار مداوم در مجموعه های مبتنی بر هش را تضمین می کند و ثابت های مهمی را ارائه می دهد که صحت کد را بهبود می بخشد.

در حالی که کلاس های بسته بندی در مقایسه با بدوی ، برخی از حافظه را تحمل می کنند ، JVM های مدرن استفاده خود را از طریق ذخیره سازی و ترکیب JIT بهینه می کنند. بهترین شیوه ها شامل استفاده از روش های کارخانه به جای سازندگان مستهلک ، استفاده از .equals () برای مقایسه ارزش ، و انتخاب بدوی برای کد عملکرد مهم است. با پیشرفت های تطبیق الگوی جاوا ۲۱ و ادغام موضوع مجازی ، کلاسهای بسته بندی همچنان در حال تحول هستند و در حالی که حفظ می کنند ، از پسمانگ می روند.

نوع بدوی کلاس بسته بندی مثال ایجاد
بولی java.lang.boolean bo olean.valueof (true)
بایت java.lang.byte <کد > byte.valueof ((بایت) ۱)
char java.lang.character
کوتاه java.lang.short

short.valueof(short)100)
| r integer.valueof (42)
طولانی java.lang.lon g long.valueof (10000L)
float java.lang. float float.valueof (3.14f)
double double java.lang double.valueof (2.71828d)