کلاس wrapper مربوط به اعداد
با سلام به همه دوستان وهمراهان 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 باشید
نویسنده: مهدی عادلی فر
منبع: انجمن تخصصی فناوری اطلاعات ایران