- کلاس های wrapper چیست؟
- بسته بندی خودکار/باز کردن بسته بندی اولیه؛
- عملکرد کلاس Integer، متدها و ثابت های آن.
کلاس های لفاف دار انواع ابتدایی
همانطور که می دانید جاوا انواع داده های مختلفی دارد که می توان آنها را به دو بلوک تقسیم کرد:- اولیه؛
- ارجاع.
- اعداد صحیح - بایت، کوتاه، int، طولانی؛
- اعداد ممیز شناور (واقعی) - شناور، دو برابر؛
- نوع داده منطقی - بولی؛
- نوع داده کاراکتر - char.
نوع اولیه | کلاس لفاف |
---|---|
بایت | بایت |
کوتاه | کوتاه |
بین المللی | عدد صحیح |
طولانی | طولانی |
شناور | شناور |
دو برابر | دو برابر |
بولی | بولی |
کاراکتر | شخصیت |
عدد صحیح
کلاس Integer یک کلاس wrapper از نوع اولیه int است. این کلاس حاوی یک فیلد واحد از نوع int است. Integer به عنوان یک کلاس wrapper متدهای مختلفی را برای کار با int و همچنین تعدادی روش برای تبدیل int به String و String به int ارائه می دهد. در زیر نمونه های مختلف کار با کلاس را بررسی خواهیم کرد. بیایید با خلقت شروع کنیم. متداول ترین (و ساده ترین برای استفاده) گزینه ایجاد زیر است:
Integer a = 3;
یعنی مقداردهی اولیه یک متغیر Integer در این مورد مشابه مقداردهی اولیه یک متغیر int است. علاوه بر این، یک متغیر Integer را می توان با مقدار یک متغیر int مقداردهی اولیه کرد:
int i = 5;
Integer x = i;
System.out.println(x); // 5
در مورد بالا، بسته بندی خودکار به طور ضمنی رخ می دهد. در ادامه بیشتر در مورد آن صحبت خواهیم کرد. علاوه بر گزینه های مقداردهی اولیه فهرست شده در بالا، می توان یک متغیر Integer مانند سایر اشیاء با استفاده از سازنده و کلمه کلیدی جدید ایجاد کرد:
Integer x = new Integer(25);
System.out.println(x);
با این حال، نوشتن بیشتر طول می کشد و خواندن آن بیشتر طول می کشد، بنابراین این گزینه کمترین رایج ترین گزینه است. شما می توانید هر کاری را با متغیرهای Integer انجام دهید که می توانید با متغیرهای int انجام دهید. اونها می تونند ... باشند:
تا کردن |
|
تفریق کردن |
|
تکثیر کردن |
|
تقسیم کنید |
|
افزایش |
|
کاهش |
|
Integer a = null;
Integer b = a + 1; // Здесь мы упадем с "Exception in thread "main" java.lang.NullPointerException"
System.out.println(b);
اکثر عملیات مقایسه به همان روشی که در نوع اولیه int انجام می شود:
Integer a = 1;
Integer b = 2;
System.out.println(a > b);
System.out.println(a >= b);
System.out.println(a < b);
System.out.println(a <= b);
خروجی:
false
false
true
true
عملیات مقایسه دو متغیر عدد صحیح برجسته است. و نکته اینجاست که Integer یک نوع داده مرجع است و متغیرهای آن ارجاعات به مقادیر را ذخیره می کنند و نه خود مقادیر (اشیاء) را. تظاهرات این واقعیت را می توان هنگام اجرای قطعه کد زیر مشاهده کرد:
Integer a = 1;
Integer b = 1;
Integer c = new Integer(1);
System.out.println(a == b); // true
System.out.println(a == c); // false
نتیجه برابری اول درست و دومی نادرست خواهد بود. این به این دلیل اتفاق می افتد که در مورد اول ما دو متغیر ("a" و "b") را با هم مقایسه می کنیم که ارجاعات به یک شی را ذخیره می کنند. و در حالت دوم، دو متغیر را با هم مقایسه می کنیم که به دو شی متفاوت اشاره می کنند (هنگام ایجاد متغیر "c" ما یک شی جدید ایجاد کردیم). بیایید مثال جالب دیگری بزنیم:
Integer a = 1;
Integer b = 1;
Integer x = 2020;
Integer y = 2020;
System.out.println(a == b); // true
System.out.println(x == y); // false
همانطور که می بینیم، نتیجه مقایسه اول درست است و نتیجه مقایسه دوم نادرست است. همه چیز در مورد ذخیره سازی است. همه اعداد صحیح در محدوده 128- تا 127 (این مقادیر را می توان سفارشی کرد) در حافظه پنهان ذخیره می شوند. بنابراین وقتی یک متغیر جدید ایجاد میکنیم و یک مقدار صحیح بین -128 و 127 به آن اختصاص میدهیم، یک شی جدید ایجاد نمیکنیم، بلکه به متغیر یک مرجع به یک شی از قبل ایجاد شده در حافظه پنهان اختصاص میدهیم. حال با دانستن این واقعیت، مثال بالا چندان عرفانی به نظر نمی رسد. متغیرهای a و b به یک شی اشاره دارند - یک شی از حافظه پنهان. و در طول مقداردهی اولیه متغیرهای x و y، هر بار یک شی جدید ایجاد کردیم و این متغیرها ارجاعات به اشیاء مختلف را ذخیره می کردند. و همانطور که می دانید عملگر == مقادیر متغیرها را مقایسه می کند و مقادیر متغیرهای مرجع مرجع هستند. برای بررسی دقیق برابری بین دو متغیر عدد صحیح، باید از روش برابری (هرچقدر هم که بی اهمیت به نظر برسد) استفاده کنید. بیایید مثال بالا را بازنویسی کنیم:
Integer a = 1;
Integer b = 1;
Integer x = 2020;
Integer y = 2020;
System.out.println(a.equals(b)); // true
System.out.println(x.equals(y)); // true
بسته بندی خودکار و باز کردن بسته بندی عدد صحیح
بسته بندی و بسته بندی خودکار چیست؟ هنگام ایجاد متغیرهای عدد صحیح جدید، از ساختار زیر استفاده کردیم:Integer a = 2020;
به این ترتیب یک شی جدید بدون استفاده از عملگر کلید جدید ایجاد کردیم. این به لطف مکانیزم بسته بندی خودکار از نوع اولیه int امکان پذیر است. رویه معکوس زمانی اتفاق میافتد که یک متغیر int اولیه را به مقدار یک متغیر مرجع Integer اختصاص دهیم:
Integer a = 2020;
int x = a;
در این مورد، به نظر می رسد که ما یک مرجع (یعنی ارجاع به یک شی، مقدار متغیر "a") را به یک متغیر ابتدایی نسبت داده ایم. اما در واقع به لطف مکانیزم باز کردن بسته بندی خودکار، مقدار 2020 روی متغیر x نوشته شد. بسته بندی/باز کردن بسته بندی خودکار یک پدیده بسیار رایج در جاوا است. اغلب به خودی خود اتفاق می افتد، گاهی اوقات حتی بدون اطلاع برنامه نویس. اما هنوز باید در مورد این پدیده بدانید. ما یک مقاله جالب در مورد این موضوع در Javarush داریم .
ثابت های کلاس صحیح
کلاس Integer ثابت ها و روش های مختلفی را برای کار با اعداد صحیح ارائه می دهد. در این بخش به برخی از آنها در عمل نگاه دقیق تری خواهیم داشت. بیایید با ثابت ها شروع کنیم. جدول زیر تمام ثابت های کلاس را نشان می دهد:کوستانتا | شرح |
---|---|
اندازه | تعداد بیت های سیستم اعداد دو رقمی اشغال شده توسط نوع int |
BYTES | تعداد بایت های سیستم اعداد دو رقمی اشغال شده توسط نوع int |
MAX_VALUE | حداکثر مقداری که یک نوع int می تواند نگه دارد |
MIN_VALUE | حداقل مقداری که یک نوع int می تواند داشته باشد |
تایپ کنید | یک شی از نوع Class از نوع int را برمی گرداند |
public static void main(String[] args) {
System.out.println(Integer.SIZE);
System.out.println(Integer.BYTES);
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.TYPE);
}
در نتیجه خروجی زیر را دریافت می کنیم:
32
4
2147483647
-2147483648
int
روش های کلاس عدد صحیح
حالا بیایید نگاهی گذرا به متدهای پرکاربرد کلاس Integer داشته باشیم. بنابراین، "بالا" با روش هایی برای تبدیل یک عدد از یک رشته یا تبدیل یک رشته از یک عدد هدایت می شوند. بیایید با تبدیل رشته به عدد شروع کنیم. برای این منظور از روش parseInt استفاده می شود که امضای آن در زیر است:-
static int parseInt(String s)
int i = Integer.parseInt("10");
System.out.println(i); // 10
اگر تبدیل امکان پذیر نباشد - برای مثال، کلمه ای را به متد parseInt ارسال کردیم - یک NumberFormatException پرتاب می شود. متد parseInt(String s) یک برادر بارگذاری شده دارد:
-
static int parseInt(String s, int radix)
System.out.println(Integer.parseInt("0011", 2)); // 3
System.out.println(Integer.parseInt("10", 8)); // 8
System.out.println(Integer.parseInt("F", 16)); // 15
متدهای parseInt یک نوع داده اولیه int را برمی گرداند. این روش ها یک آنالوگ دارند - متد valueOf . برخی از تغییرات این روش به سادگی parseInt را به صورت داخلی فراخوانی می کنند. تفاوت با parseInt این است که نتیجه valueOf یک عدد صحیح خواهد بود نه یک int. بیایید در زیر تمام گزینه های این روش و مثالی از نحوه کار آن را در نظر بگیریم:
- static Integer valueOf(int i) - یک عدد صحیح را برمی گرداند که مقدار آن i است.
- static Integer valueOf(String s) - شبیه parseInt(String s) است، اما نتیجه عدد صحیح خواهد بود.
- static Integer valueOf(string s، int radix) - شبیه parseInt(string s، int radix)، اما نتیجه عدد صحیح خواهد بود.
int a = 5;
Integer x = Integer.valueOf(a);
Integer y = Integer.valueOf("20");
Integer z = Integer.valueOf("20", 8);
System.out.println(x); // 5
System.out.println(y); // 20
System.out.println(z); // 16
ما روش هایی را بررسی کردیم که به شما امکان می دهد رشته را به int/Integer تبدیل کنید. روش معکوس با استفاده از متدهای toString به دست می آید . می توانید متد toString را روی هر شیء Integer فراخوانی کنید و نمایش رشته آن را دریافت کنید:
Integer x = 5;
System.out.println(x.toString()); // 5
با این حال، با توجه به این واقعیت که متد toString اغلب به طور ضمنی بر روی اشیاء نامیده می شود (به عنوان مثال، هنگام ارسال یک شی به کنسول برای چاپ)، این روش به ندرت توسط توسعه دهندگان به طور صریح استفاده می شود. همچنین یک روش static toString وجود دارد که یک پارامتر int را می گیرد و آن را به یک نمایش رشته تبدیل می کند. مثلا:
System.out.println(Integer.toString(5)); // 5
با این حال، مانند روش غیر استاتیک toString، استفاده از روش استاتیک به طور صریح نادر است. جالب تر از آن روش استاتیک toString است که 2 پارامتر عدد صحیح را می گیرد:
- static String toString (int i، int radix) - i را به یک نمایش رشته در سیستم شماره ریشه تبدیل می کند.
System.out.println(Integer.toString(5, 2)); // 101
کلاس Integer چند روش برای یافتن حداکثر/حداقل دو عدد دارد:
- static int max(int a, int b) بزرگترین مقدار را در بین متغیرهای ارسال شده برمی گرداند.
- static int min(int a, int b) کوچکترین مقدار را در بین متغیرهای تصویب شده برمی گرداند.
int x = 4;
int y = 40;
System.out.println(Integer.max(x,y)); // 40
System.out.println(Integer.min(x,y)); // 4
نتیجه
در این مقاله ما به کلاس Integer نگاه کردیم. ما در مورد این که این کلاس چه نوع کلاسی است و کلاس های wrapper صحبت کردیم. ما از منظر عملی به کلاس نگاه کردیم. ما به نمونه هایی از عملیات حسابی از جمله عملیات مقایسه نگاه کردیم. ما نگاهی به پیچیدگی های مقایسه دو متغیر Integer انداختیم و مفهوم اشیاء ذخیره شده را بررسی کردیم. همچنین به پدیده بستهبندی/بازکردن خودکار انواع دادههای اولیه اشاره کردیم. علاوه بر این، ما موفق شدیم به برخی از متدهای کلاس Integer و همچنین برخی از ثابت ها نگاه کنیم. آنها مثال هایی از تبدیل اعداد از یک سیستم عددی به سیستم دیگر را ارائه کردند.مشق شب
-
مطالعه کنید که چه روش های دیگری از کلاس Integer وجود دارد (می توانید آنها را در وب سایت با اسناد رسمی مطالعه کنید)، در نظرات بنویسید که کدام یک از روش هایی که مطالعه کرده اید (به استثنای موارد ارائه شده در مقاله) به نظر شما مفیدتر است ( اغلب توسط شما استفاده خواهد شد). و همچنین دلایلی برای نظر خود ارائه دهید.
PS در اینجا هیچ پاسخ صحیحی وجود ندارد، اما این فعالیت به شما امکان می دهد کلاس را بهتر مطالعه کنید.
-
حل یک مسئله کوچک ساده برای یکپارچه سازی مواد.
ما دو عدد داریم:
1100001001 - در سیستم اعداد باینری
33332 - در سیستم اعداد کوینریلازم است فقط با استفاده از متدهای کلاس Integer، ماکزیمم را در بین دو عدد داده شده تعیین کنیم و سپس تفاوت بین مقدار حداکثر و حداقل را در سیستم اعداد سه تایی نمایش دهیم.
-
حداکثر مقدار صحیح ممکن را به سیستم اعداد اکتالی تبدیل کنید و تعداد ارقام را در عدد حاصل نمایش دهید (عدد را به صورت برنامه ای بشمارید).
GO TO FULL VERSION