با سلام به همه دوستان وهمراهان Itpro. اعداد ویژگی های متعددی در زبان
جاوا دارند که در این بخش به بحث در مورد اعداد در جاوا می پردازیم. وقتی
که شما از اعداد در جاوا استفاده می کنید به این معنی است که شما از انواع
داده های اولیه در جاوا مثل byte,int, long, double , … استفاده می نمایید.
برای مثال به کد زیر توجه کنید:
int i = 5000; float gpa = 13.65; byte mask = 0xaf;در زمان برنامه نویسی ممکن است وضعیتی پیش بیاید که ما به جای انواع داده اولیه از اشیاء استفاده کنیم. جاوا این امر را با استفاده از کلاس های wrapper میسر می سازد. در جاوا کلاس هایی وجود دارد که متناظر با انواع داده اولیه هستند و در این کلاس ها مجموعه متدهایی تعریف شده است که می تواند در برنامه نویسی بسیار مورد استفاده قرار بگیرد. همه ی کلاس های wrapper از کلاس Number ارث برده اند. شکل زیر انواع این کلاس ها را نشان می دهد.
اشیائی که از کلاس wrapper ساخته می شود می تواند یک مقدار از نوع داده مورد نظر را درخود ذخیره کند. تبدیل نوع داده واقعی به یک شی را boxing می گویند و این عمل توسط کامپایلر انجام می شود. بنابراین زمانی که یک شی از کلاس wrapper می سازیم باید در constructor آن یک مقدار از نوع داده متناسب آن قرار دهیم. تبدیل شئی از کلاس wrapper به نوع داده اولیه را unboxing می گویند. کلاس Number در پکیج java.lang قرار دارد. در کد زیر مثالی از boxing و unboxing آورده شده است.
public class Test{ public static void main(String args[]){ Integer x = 5; // boxes int to an Integer object x = x + 10; // unboxes the Integer to a int System.out.println(x); } }نتیجه اجرای کد بالا 15 خواهد بود. وقتی که یک شی از کلاس Integer ساخته می شود و نام آن را x می گذاریم. وقتی که یک مقدار عدد صحیح به این شئ انتساب می دهیم کامپایلر عمل boxing را انجام می دهد و آن را در داخل یک شئ می ریزد. اما در خط بعد که عمل جمع کردن عدد انجام می شود کامپایلر باید x را تبدیل به نوع اصلی int بکند تا بتواند با عدد10 جمع کند و در این حالت عمل unboxing انجام می شود.
متدهای کلاس Number
در ادامه به لیستی از متدهای موجود در کلاس های ارث برده از کلاس Number آورده شده است و هرکدام توضیح داده شده اند. کلاس های wrapper که گفته شد همه از کلاس Number ارث برده اند.
- تابع [datatype]Value این تابع عمل تبدیل نوع داده شده را به نوع خواسته شده انجام می دهد. مقدار datatype در اول این تابع می تواندبا نام انواع داده های عددی جایگزین شود توابع این متد به شکل زیر هستند:
byte byteValue() short shortValue() int intValue() long longValue() float floatValue() double doubleValue()توابع گفته شده متدهای پیش فرض هستند و هیچ پارامتری ندارند و مقدار بازگشتی آنها همان مقدار [datatype] است. برای درک بهتر به کد زیر توجه کنید:
public class Test{ public static void main(String args[]){ Integer x = 5; // داده بایت برمی گرداند System.out.println( x.byteValue() ); // نوع داده دابل برمیگرداند System.out.println(x.doubleValue()); // نوع داده لانگ برمی گرداند System.out.println( x.longValue() ); } }نتیجه اجرای کد بالا به شکل زیر خواهد بود.
5 5.0 5
- متد compareTo: این متد عدد شی صدا زننده را با عددی که به عنوان آرگومان به متد داده شده را مقایسه می کند. با استفاده از این تابع می توان اعداد از انواع متفاوت را با هم مقایسه کرد ولی باید دقت داشت که هر دو عدد از یک نوع باشند و نمی توان تابع compareTo مربوط به یک نوع byte را با ورودی long صدا زد. این عمل باعث خطا می شود. شکل نوشتاری این متد مانند خط زیر است:
public int compareTo( NumberSubClass referenceName )همانگونه که گفته شد پارامتر ورودی این متد یک شی از کلاس wrapper متناظر می باشد. مقدار بازگشتی این متد یک عدد صحیح از نوع int است که می تواند یا 0 یا 1 و یا -1 باشد. که به شرح این اعدا می پردازیم. اگر دو عدد با یکدیگر برابر باشند در نتیجه متد عدد 0 را بازمی گرداند و اگر عدد از آرگومان خودش کوچکتر باشد عدد -1 و اگر عدد از آرگومان خود بزرگتر باشد عدد 1 به عنوان نتیجه بازگشت داده می شود. برای مثال به کد زیر دقت کنید:
public class Test{ public static void main(String args[]){ Integer x = 5; System.out.println(x.compareTo(3)); System.out.println(x.compareTo(5)); System.out.println(x.compareTo(8)); } }و نتایج کدهای بالا به شکل زیر است:
1 0 -1
- متد equals: این متد مشخص میکند که دو عدد با هم برابر هستند یا خیر. کار این متد به این شکل است توسط شئی صدا زده میشود و یک عدد به آن داده میشود اگر عدد داده شده برابر با مقدار خود شئ باشد مقدار true و اگر برابر نباشد مقدار إfalse برگردانده میشود.شکل تعریف شده این تابع به شکل زیر است:
public boolean equals(Object o)چیزی که این متد به عنوان پارامتر ورودی میگیرید میتواند هر نوع شیئی باشد.
مقدار بازگشتی این متد همانطور که گفته شد یک مقدار boolean است که اگر ورودی متد با خود شئ برابر باشند true برگردانده می شود. در ادامه مثالی برای این متد آورده شده است:
public class Test{ public static void main(String args[]){ Integer x = 5; Integer y = 10; Integer z =5; Short a = 5; System.out.println(x.equals(y)); System.out.println(x.equals(z)); System.out.println(x.equals(a)); } }خروجی کد بالا به شکل زیر خواهد بود
false true false
- متد valeuOf: این متد مقدار عددی موجود در یک شئ وارد شده را برمیگرداند. آرگومان ورودی میتواند نوع داده اصلی یا String و مانند اینها باشد.
static Integer valueOf(int i) static Integer valueOf(String s) static Integer valueOf(String s, int radix)پارامتر ورودی در خط اول کد بالا برای یک عدد int است که وارد میشود و میتوان این عدد را با استفاده از این متد به انواع داده عددی مختلف تبدیل کرد. در خط دوم یک رشته به متد داده میشود که دارای اعداد در داخل رشته است که با استفاده از این متد میتوان آن را تبدیل به عدد کرد. در خط سوم نیز یک رشته دارای عدد به عنوان پارامتر ورودی اولی میباشد و پارامتر دوم نیز مبنای عدد است. خروجی این تابع یک عدد است که در مثال زیر استفاده از این متد آورده شده است.
public class Test{ public static void main(String args[]){ Integer x =Integer.valueOf(9); Double c = Double.valueOf(5); Float a = Float.valueOf("80"); Integer b = Integer.valueOf("444",16); System.out.println(x); System.out.println(c); System.out.println(a); System.out.println(b); } }خروجی کد به شکل زیر خواهد بود:
9 5.0 80.0 1092
- متد toString این متد مقدار هر شی را تبدیل به رشته میکند و بازمی گرداند. این متد میتواند یک ورودی عددی داشته باشد که آن را به رشته تبدیل کرده و بازمی گرداند. این متد برای همه اشیاء درجاوا وجود دارد. انواع مختلف این متد به شکلهای زیر است:
String toString() static String toString(int i)مثالهایی از این متد در کد زیر نشان داده شده است:
public class Test{ public static void main(String args[]){ Integer x = 5; System.out.println(x.toString()); System.out.println(Integer.toString(12)); } }خروجی کد به شکل زیر خواهد بود:
5 12در این بخش به معرفی کلاس های wrapper مربوط به اعداد پرداختیم و متدهای آن را معرفی کردیم. در مطالب بعدی به ادامه معرفی متدهای این کلاس ها خواهیم پرداخت Itpro باشید
نویسنده: مهدی عادلی فر
منبع: انجمن تخصصی فناوری اطلاعات ایران