JavaRush /وبلاگ جاوا /Random-FA /راهنمای کلاس عدد صحیح جاوا

راهنمای کلاس عدد صحیح جاوا

در گروه منتشر شد
در این مقاله در مورد کلاس Integer صحبت خواهیم کرد. بیایید این سوالات را در نظر بگیریم:
  • کلاس های wrapper چیست؟
  • بسته بندی خودکار/باز کردن بسته بندی اولیه؛
  • عملکرد کلاس Integer، متدها و ثابت های آن.
آموزش کلاس عدد صحیح جاوا - 1

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

همانطور که می دانید جاوا انواع داده های مختلفی دارد که می توان آنها را به دو بلوک تقسیم کرد:
  • اولیه؛
  • ارجاع.
چندین نوع داده اولیه در جاوا وجود دارد:
  • اعداد صحیح - بایت، کوتاه، int، طولانی؛
  • اعداد ممیز شناور (واقعی) - شناور، دو برابر؛
  • نوع داده منطقی - بولی؛
  • نوع داده کاراکتر - char.
هر نوع داده اولیه دارای کلاس wrapper مخصوص به خود است. یک نوع داده مرجع که برادر کوچک اولیه خود را در یک شی جاوا می پیچد. در زیر انواع داده های اولیه و کلاس های بسته بندی مربوط به آنها آورده شده است:
نوع اولیه کلاس لفاف
بایت بایت
کوتاه کوتاه
بین المللی عدد صحیح
طولانی طولانی
شناور شناور
دو برابر دو برابر
بولی بولی
کاراکتر شخصیت
از نظر عملی، بدوی ها و کلاس های بسته بندی آن ها اشتراکات زیادی دارند. اکثر عملیات ها به صورت یکسان انجام می شوند. با این حال، کلاس های wrapper تعدادی ویژگی دارند که مشخصه های اولیه نیستند. اول، کلاس هایی وجود دارد: هنگام کار با کلاس های wrapper، ما با اشیا کار می کنیم. ثانیا (هر چیزی که از نقطه یک می آید) این اشیا می توانند تهی باشند. سوم، کلاس های wrapper تعدادی ثابت و روش ارائه می دهند که کار با یک نوع داده خاص را آسان تر می کند. در این مقاله نگاهی دقیق تر به کار با کلاس Integer خواهیم داشت.

عدد صحیح

کلاس 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 = 6;
Integer b = 2;
Integer c = a + b;
System.out.println(c); // 8
تفریق کردن

Integer a = 6;
Integer b = 2;
Integer c = a - b;
System.out.println(c); // 4
تکثیر کردن

Integer a = 6;
Integer b = 2;
Integer c = a * b;
System.out.println(c); // 12
تقسیم کنید

Integer a = 6;
Integer b = 2;
Integer c = a / b;
System.out.println(c); // 3
افزایش

Integer a = 6;
a++;
++a;
System.out.println(a); // 8
کاهش

Integer a = 6;
a--;
--a;
System.out.println(a); // 4
با این حال، با همه اینها، باید مراقب باشید و به یاد داشته باشید که Integer یک نوع داده مرجع است و متغیری از این نوع می تواند null باشد. در این حالت (اگر متغیر تهی باشد)، بهتر است از عملیات حسابی (و هر عملیات دیگری که null در آن نوید خوبی ندارد) خودداری کنید. در اینجا یک مثال است:
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)
این متد String را به int تبدیل می کند. بیایید نحوه عملکرد این روش را نشان دهیم:
int i = Integer.parseInt("10");
System.out.println(i); // 10
اگر تبدیل امکان پذیر نباشد - برای مثال، کلمه ای را به متد parseInt ارسال کردیم - یک NumberFormatException پرتاب می شود. متد parseInt(String s) یک برادر بارگذاری شده دارد:
  • 
    static int parseInt(String s, int radix)
این متد پارامتر s را به int تبدیل می کند. پارامتر radix نشان می دهد که در کدام سیستم عددی در ابتدا عدد در s نوشته شده است که باید به int تبدیل شود. نمونه های زیر:
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 و همچنین برخی از ثابت ها نگاه کنیم. آنها مثال هایی از تبدیل اعداد از یک سیستم عددی به سیستم دیگر را ارائه کردند.

مشق شب

  1. مطالعه کنید که چه روش های دیگری از کلاس Integer وجود دارد (می توانید آنها را در وب سایت با اسناد رسمی مطالعه کنید)، در نظرات بنویسید که کدام یک از روش هایی که مطالعه کرده اید (به استثنای موارد ارائه شده در مقاله) به نظر شما مفیدتر است ( اغلب توسط شما استفاده خواهد شد). و همچنین دلایلی برای نظر خود ارائه دهید.

    PS در اینجا هیچ پاسخ صحیحی وجود ندارد، اما این فعالیت به شما امکان می دهد کلاس را بهتر مطالعه کنید.

  2. حل یک مسئله کوچک ساده برای یکپارچه سازی مواد.

    ما دو عدد داریم:

    1100001001 - در سیستم اعداد باینری
    33332 - در سیستم اعداد کوینری

    لازم است فقط با استفاده از متدهای کلاس Integer، ماکزیمم را در بین دو عدد داده شده تعیین کنیم و سپس تفاوت بین مقدار حداکثر و حداقل را در سیستم اعداد سه تایی نمایش دهیم.

  3. حداکثر مقدار صحیح ممکن را به سیستم اعداد اکتالی تبدیل کنید و تعداد ارقام را در عدد حاصل نمایش دهید (عدد را به صورت برنامه ای بشمارید).

نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION