سلام! شما در حال حاضر به خوبی با انواع اولیه آشنا هستید و تا حد زیادی با آنها کار کرده اید. در برنامه نویسی (و به طور خاص جاوا)، اولیه ها مزایای زیادی دارند: آنها از حافظه کمی استفاده می کنند (و در نتیجه برنامه را کارآمدتر می کنند) و دارای یک محدوده مشخص از مقادیر هستند. با این حال، در حین یادگیری جاوا، ما قبلاً این عبارت را تکرار کرده ایم که "همه چیز در جاوا یک شی است". اما بدوی ها مستقیماً با این کلمات در تضاد هستند. آنها اشیاء نیستند بنابراین، آیا اصل "همه چیز یک شی" ما نادرست است؟ در واقع، اینطور نیست. در جاوا، هر نوع اولیه یک برادر دوقلو دارد، یک کلاس wrapper.
کلاس Wrapper چیست؟
Wrapper یک کلاس ویژه است که یک اولیه را در داخل ذخیره می کند. اما چون یک کلاس است، می توانید نمونه هایی از آن ایجاد کنید. آنها مقادیر اولیه را در داخل ذخیره می کنند، اما همچنان اشیاء واقعی هستند. نامهای کلاس Wrapper بسیار شبیه (یا دقیقاً مشابه) نامهای اولیه مربوط به خود هستند. بنابراین، آنها به راحتی قابل یادآوری هستند.
کلاس های Wrapper برای انواع داده های اولیه |
انواع داده های اولیه |
کلاس های لفاف دار |
بین المللی |
عدد صحیح |
کوتاه |
کوتاه |
طولانی |
طولانی |
بایت |
بایت |
شناور |
شناور |
دو برابر |
دو برابر |
کاراکتر |
شخصیت |
بولی |
بولی |
اشیاء Wrapper مانند هر شی دیگری ایجاد می شوند:
public static void main(String[] args) {
Integer i = new Integer(682);
Double d = new Double(2.33);
Boolean b = new Boolean(false);
}
کلاسهای Wrapper به ما اجازه میدهند کاستیهای انواع اولیه را کاهش دهیم. واضح ترین آن این است که بدوی ها روشی ندارند.
به عنوان مثال، آنها متد toString() ندارند ، بنابراین شما نمی توانید، برای مثال، یک
int را به یک
رشته تبدیل کنید . اما کلاس Wrapper
Integer این کار را آسان می کند.
public static void main(String[] args) {
Integer i = new Integer(432);
String s = i.toString();
}
با این حال، تبدیل در جهت دیگر می تواند پیچیده تر باشد.
فرض کنید یک رشته داریم که مطمئناً می دانیم که شامل یک عدد است.
صرف نظر از این، هیچ راه بومی برای استفاده از int اولیه برای استخراج عدد از
رشته و تبدیل آن به عدد وجود ندارد . اما، ما می توانیم با کلاس های wrapper.
public static void main(String[] args) {
String s = "1166628";
Integer i = Integer.parseInt(s);
System.out.println(i);
}
خروجی:
1166628
ما با موفقیت یک عدد را از
رشته استخراج کردیم و آن را به متغیر مرجع
Integer i نسبت دادیم . ضمناً در مورد مراجع. قبلاً میدانید که آرگومانها به روشهای مختلف به روشها منتقل میشوند: ابتداییها براساس مقدار، و اشیاء با مرجع. شما می توانید از این دانش هنگام ایجاد متدهای خود استفاده کنید: به عنوان مثال، اگر روش شما از اعداد کسری استفاده می کند اما برای عبور از طریق مرجع نیاز به منطق دارید، می توانید آرگومان های
Double /
Float را به جای
double /
float به متد ارسال کنید . علاوه بر روشهای کلاسهای wrapper، زمینههای استاتیک آنها نیز میتواند بسیار راحت باشد. برای مثال، تصور کنید که وظیفه زیر را دارید: نمایش حداکثر مقدار ممکن
int و به دنبال آن حداقل مقدار ممکن. این مشکل نسبتاً اساسی به نظر می رسد. اما بدون گوگل، بعید است که بتوانید این کار را انجام دهید. اما لفافها به شما این امکان را میدهند که به راحتی چنین "وظایف پیش پا افتاده" را انجام دهید:
public class Main {
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
}
}
این زمینه ها شما را از انجام کارهای جدی تر منحرف می کنند. ناگفته نماند که تایپ
2147483647 (که اتفاقاً مقدار MAX_VALUE است) کار کوچکی نیست! :) همچنین در درس قبلی به این نکته اشاره کردیم که اجسام wrapper تغییرناپذیر هستند.
public static void main(String[] args) {
Integer a = new Integer(0);
Integer b = new Integer(0);
b = a;
a = 1;
System.out.println(b);
}
خروجی:
0
وضعیت جسمی که در ابتدا توسط
a به آن اشاره شده بود تغییر نکرد (زیرا مقدار
b نیز تغییر می کرد). همانند
String s، به جای تغییر وضعیت شیء wrapper، یک شی کاملاً جدید در حافظه ایجاد می شود. بنابراین، چرا سازندگان جاوا در نهایت تصمیم به ترک انواع اولیه در زبان گرفتند؟ از آنجایی که همه چیز باید یک شی باشد، و ما کلاسهای wrapper داریم که میتوانند هر چیزی را که اولیهها بیان میکنند بیان کنند، چرا نه تنها wrapperها را در زبان نگه داریم و ابتداییها را حذف نکنیم؟ پاسخ ساده است: عملکرد. انواع اولیه بدوی نامیده می شوند زیرا فاقد بسیاری از ویژگی های "سنگین" اشیاء هستند. بله، اشیا روشهای راحت زیادی دارند، اما همیشه به آنها نیاز ندارید. گاهی اوقات تنها چیزی که نیاز دارید عدد 33 یا 2.62 یا
true /
false است . در شرایطی که مزایای اشیاء مهم نیست و برای عملکرد برنامه مورد نیاز نیست، اولیهها به مراتب برای این کار مناسبتر هستند.
GO TO FULL VERSION