مفهوم الأعداد في جافا
أعداد: تعني numbers في اللغة الإنجليزية, و نحن عادةً ما نستخدم أنواع البيانات البدائية ( Primitive Data Types ) لتخزين الأعداد.
أي لتعريف متغير بهدف تخزين عدد, نقوم بتعريفه كـ int أو float أو double إلخ..
مثال
int a = 10; short b = 50; float c = 10.5f; double d = 37.002;
أحياناً يضطر المبرمج أن يستخدم الكائن للنوع و ليس الشكل البدائي للنوع.
من أجل ذلك, جافا تقدم لنا wrapper classes.
ما معنى wrapper classes ؟
كل نوع بيانات بدائي في جافا له كلاس يمثله, و يكون من نفس إسمه, أمثلة:
النوع
intيمكن تمثيله بالكلاسInteger.النوع
floatيمكن تمثيله بالكلاسFloat.النوع
byteيمكن تمثيله بالكلاسByte.النوع
doubleيمكن تمثيله بالكلاسDouble.النوع
shortيمكن تمثيله بالكلاسShort.النوع
longيمكن تمثيله بالكلاسLong.
إذاً الـ wrapper classes هم كل الكلاسات التي تمثل أنواع البيانات البدائية.
هذه الصورة تظهر لك جميع الكلاسات التي تمثل الأعداد.
ما هي فائدة الـ wrapper classes ؟
فكرة الـ wrapper classes جعلنا قادرين على معاملة هذه الأنواع ككائنات و بناء دوال خاصة لهم و لكن المبرمج العادي قد لا يتعامل بتاتاً مع الـ wrapper classes لأنه نادراً ما يحتاج لهم.
مصطلحات هامة
عملية تحويل النوع البدائي لكائن من نفس النوع تسمى boxing.
عملية إرجاع قيمة الكائن إلى النوع البدائي لهذا الكائن تسمى unboxing.
مثال
Integer a = 10; // int و ليس Integer هنا ستكون a لأن نوع القيمة التي خزنها المتغير boxing هذه العملية تسمى int b = a + 15; // 15 قبل إضافتها على int لأنه سيتم تحويل قيمته للنوع a بالنسبة للمتغير unboxing هذه العملية تسمى
شرح الكود
Integer a = 10:
aيمثل كائن نوعهIntegerقيمته 10.int b = a + 15:
هنا سيتم تحويل قيمة الكائنaإلى النوعintثم إضافة 15 عليها و تخزين الناتج في المتغيرb.
دوال الأعداد في جافا التي تستخدم مع كائنات الـ wrapper classes
ذكرنا بعض الدوال التي تستخدم مع الـ wrapper classes في هذا الجدول.
| إسم الدالة مع تعريفها | |
|---|---|
public ... xxxValue()
عبارة عن مجموعة دوال تستخدم لتحويل قيمة الكائن ( الذي يمثل عدد ) لقيمة بدائية تحددها الدالة التي تم إستدعاءها من الكائن و ترجعها.تابع القراءة » |
|
public int compareTo(T o)
تقارن قيمة الكائن الذي قام باستدعائها و الذي يمثل عدد ما مع قيمة الكائن التي نمررها لها مكان الباراميتر o.ترجع 0 إن كانت قيمتهما متساوية, و ترجع 1 إن كانت قيمة الكائن الذي إستدعاها أكبر, و ترجع 1- إن كانت قيمة الكائن الذي إستدعاها أصغر. تابع القراءة » |
|
public boolean equals(Object o)
تقارن قيمة الكائن الذي قام باستدعائها و الذي يمثل عدد ما مع قيمة الكائن التي نمررها لها مكان الباراميتر o.ترجع true إن كانت قيمتهما متساوية, و ترجع false إن لم تكن كذلك.تابع القراءة » |
|
public static Integer valueOf(String s)
تحول قيمة الكائن s التي نمررها لها و التي تمثل عدد في الأساس لقيمة نوعها Integer.تابع القراءة » |
|
public String toString()
ترجع قيمة الكائن الذي قام باستدعائها و الذي يمثل عدد ما كـ String.ملاحظة: تحويل القيمة العددية لقيمة نصية مفيد جداً في بعض الحالات و يجعل المبرمج يستفيد من دوال هي في الأصل ليست للتعامل مع الأعداد. تابع القراءة » |
|
public ... parseXxx(String s)
عبارة عن مجموعة دوال تستخدم للحصول على القيمة البدائية لعدد مخزن كـ String.تابع القراءة » |
|
Java الدالة xxxValue()
تعريفها
عبارة عن مجموعة دوال لهم نفس العمل و هو تحويل قيمة العدد المتمثلة بكائن لقيمة بدائية تحددها الدالة التي تم إستدعاءها من الكائن و ترجعها.
بناؤها
// الدالة الأولى
public byte byteValue()
// الدالة الثانية
public short shortValue()
// الدالة الثالثة
public int intValue()
// الدالة الرابعة
public long longValue()
// الدالة الخامسة
public float floatValue()
// الدالة السادسة
public double doubleValue()
باراميترات
لا يقبلون أي باراميتر.
قيمة الإرجاع
يرجعون القيم البدائية للكائنات.
مثال
public class Main {
public static void main(String[] args) {
Integer a = 10;
System.out.println( a.byteValue() ); // byte هنا سيتم تحويل قيمة المتغير للنوع
System.out.println( a.shortValue() ); // short هنا سيتم تحويل قيمة المتغير للنوع
System.out.println( a.intValue() ); // int هنا سيتم تحويل قيمة المتغير للنوع
System.out.println( a.longValue() ); // long هنا سيتم تحويل قيمة المتغير للنوع
System.out.println( a.floatValue() ); // float هنا سيتم تحويل قيمة المتغير للنوع
System.out.println( a.doubleValue() ); // double هنا سيتم تحويل قيمة المتغير للنوع
}
}
•سنحصل على النتيجة التالية عند التشغيل.
10
10
10
10
10.0
10.0
Java الدالة compareTo()
تعريفها
تقارن قيمة الكائن الذي قام باستدعائها و الذي يمثل عدد ما مع قيمة الكائن التي نمررها لها مكان الباراميتر o.
يمكن إستخدام هذه الدالة لمقارنة أي نوع من أنواع البيانات المرجعية (Object Data Types) التي تمثل أعداد مثل: Integer - Float - Double إلخ..
ملاحظة: الكائن الذي يستدعيها و الكائن الذي نمرره لها يجب أن يكونا من نفس النوع.
بناؤها
public int compareTo(T o)
باراميترات
نضع لها كائن يمثل عدد كباراميتر.
قيمة الإرجاع
ترجع 0 إذا كانت قيمة الكائن الذي قام باستدعائها تساوي قيمة الكائن الذي نمرره لها مكان الباراميتر
o.ترجع 1 إذا كانت قيمة الكائن الذي قام باستدعائها أكبر من قيمة الكائن الذي نمرره لها مكان الباراميتر
o.ترجع 1- إذا كانت قيمة الكائن الذي قام باستدعائها أصغر من قيمة الكائن الذي نمرره لها مكان الباراميتر
o.
مثال
public class Main {
public static void main(String[] args) {
Integer a = 10;
Integer b = 20;
Integer c = 5;
Integer d = 10;
System.out.println( a.compareTo(b) ); // b أصغر من a هنا سترجع 1- لأن
System.out.println( a.compareTo(c) ); // c أكبر من a هنا سترجع 1 لأن
System.out.println( a.compareTo(d) ); // d تساوي من a هنا سترجع 0 لأن
}
}
•سنحصل على النتيجة التالية عند التشغيل.
-1
1
0
Java الدالة equals()
تعريفها
تقارن قيمة الكائن الذي قام باستدعائها و الذي يمثل عدد ما مع قيمة الكائن التي نمررها لها مكان الباراميتر o.
يمكن إستخدام هذه الدالة لمقارنة أي نوع من أنواع البيانات المرجعية (Object Data Types) التي تمثل أعداد مثل: Integer - Float - Double إلخ..
ملاحظة: الكائن الذي يستدعيها و الكائن الذي نمرره لها يجب أن يكونا من نفس النوع.
بناؤها
public boolean equals(Object o)
باراميترات
نضع لها كائن من نفس النوع كباراميتر.
قيمة الإرجاع
ترجع
trueإذا كانت قيمة الكائن الذي قام باستدعائها تساوي قيمة الكائن التي نمررها لها مكان الباراميترo.ترجع
falseإذا كانت قيمة الكائن الذي قام باستدعائها لا تساوي قيمة الكائن التي نمررها لها مكان الباراميترo.
مثال
public class Main {
public static void main(String[] args) {
Integer a = 10;
Integer b = 10;
Integer c = 50;
System.out.println( a.equals(b) ); // b تساوي قيمة a لأن قيمة true هنا سترجع
System.out.println( a.equals(c) ); // c لا تساوي قيمة a لأن قيمة false هنا سترجع
}
}
•سنحصل على النتيجة التالية عند التشغيل.
true
false
Java الدالة Integer valueOf()
تعريفها
تحول القيمة التي نمررها لها عند إستدعائها كقيمة نوعها Integer و ترجعها.
القيمة التي نمررها لها يمكن أن يكون نوعها int أو String.
بناؤها
هناك ثلاث أشكال من هذه الدالة. أي يمكن إستدعاءها بثلاث طرق مختلفة.
// الشكل الأول
public static Integer valueOf(int i)
// الشكل الثاني
public static Integer valueOf(String s)
// الشكل الثالث
public static Integer valueOf(String s, int radix)
باراميترات
الباراميتر
iنوعهintو يمثل العدد الذي سيتم إرجاعه ككائن من الكلاسInteger.الباراميتر
sنوعهStringو يمثل العدد ( كنص ) الذي سيتم إرجاعه ككائن من الكلاسInteger.الباراميتر
radixنوعهintو هو عدد عادي يستخدم لتحديد طريقة تحويل قيمة الباراميترsلكائن من الكلاسInteger.
ملاحظة: عند إضافة radix فإن قيمة الباراميترsالتي نمررها تمثل عدد binary أو octal أو decimal أو hexadecimal.
الـradixيمكن أن يكون 2 أو 8 أو 10 أو 16 بالترتيب كما فوق.
قيمة الإرجاع
valueOf(int i): ترجع قيمة العدد التي نمررها مكان المتغيرiككائن نوعهInteger.valueOf(String s): ترجع قيمة العدد التي نمررها كنص مكان الكائنsككائن نوعهInteger.valueOf(String s, int radix): ترجع قيمة العدد التي نمررها كنص مكان الكائنsككائن نوعهIntegerعلى حسب قيمة المتغيرradix.
مثال
public class Main {
public static void main(String[] args) {
// a و خزنها في الكائن Integer لقيمة نوعها int هنا قمنا بتحويل القيمة 14 التي تعتبر من النوع
Integer a = Integer.valueOf(14);
// b و خزنها في الكائن Integer لقيمة نوعها String هنا قمنا بتحويل القيمة 80 التي تعتبر من النوع
Integer b = Integer.valueOf("80");
// b و خزنها في الكائن Integer لقيمة نوعها Hexadecimal و تمثل عدد مكتوب بالوحدة String هنا قمنا بتحويل القيمة 80 التي تعتبر من النوع
Integer c = Integer.valueOf("80", 16);
// c و b و a هنا قمنا بطابعة القيم التي تم تخزينها في الكائنات
System.out.println( a );
System.out.println( b );
System.out.println( c );
}
}
•سنحصل على النتيجة التالية عند التشغيل.
14
80
128
Java الدالة toString()
تعريفها
ترجع قيمة الكائن الذي قام باستدعائها و الذي يمثل عدد ما كـ String.
أي تجعلك قادر على معاملة الكائن (الذي يمثل عدد) كنص و هذا الشيء مهم جداً و سترى فائدته في الأمثلة.
بناؤها
public String toString()
باراميترات
لا تقبل أي باراميتر.
قيمة الإرجاع
ترجع قيمة الكائن الذي قام باستدعائها و الذي يمثل عدد ما كـ String.
المثال الأول
public class Main {
public static void main(String[] args) {
Integer a = 1000;
// ثم قمنا بعرضها String لقيمة نوعها a هنا قمنا بتحويل قيمة الكائن
System.out.println( a.toString() );
}
}
•سنحصل على النتيجة التالية عند التشغيل.
1000
الآن, بما أن القيمة التي ترجعها الدالة toString() عبارة عن قيمة نصية String نستطيع إستخدام جميع الدوال الخاصة بالـString على هذا القيمة.
في المثال التالي سنستخدم الدالة length() على النص الذي سترجعه الدالة toString() لمعرفة عدد الأحرف التي يتألف منها هذا الـ String.
المثال الثاني
public class Main {
public static void main(String[] args) {
Integer a = 1000;
// من هذا الكائن الجديد و طبعنا ما أرجعتهlength() ثم قمنا باستدعاء الدالة String لقيمة نوعها a هنا قمنا بتحويل قيمة الكائن
// سترجع عدد أحرف هذا النص length() سترجع نص و الدالة toString() إذاً الدالة
System.out.println( a.toString().length() );
}
}
•سنحصل على النتيجة التالية عند التشغيل.
4
•إذاً إستطعنا معرفة حجم هذا العدد بكل سهولة بواسطة الدالة toString() التي سمحت بمعاملة العدد كنص.
Java الدالة parseXxx()
تعريفها
عبارة عن مجموعة دوال تستخدم للحصول على القيمة البدائية لعدد مخزن كـ String.
static تأخذ argument واحد أو اثنين.
بناؤها
ذكرنها هنا بعض الدوال مع الإشارة إلى أنه يوجد دوال أخرى لتحويل الأعداد المخزنة كـ String لنوع بدائي.
public static int parseInt(String s)
public static int parseInt(String s, int radix)
public static long parseLong(String s)
public static long parseLong(String s, int radix)
public static float parseFloat(String s)
public static float parseFloat(String s, int radix)
public static double parseDouble(String s)
public static double parseDouble(String s, int radix)
باراميترات
في كل الدوال نلاحظ أنه يوجد باراميتر إسمه
sنوعهString. قيمة هذا الباراميتر يجب أن تكون موافقة للنوع الذي سترجعه الدالة كالتالي:في الدالة
parseInt()يجب أن تكون قيمة الباراميترsتمثل عدد نوعهint, أي عدد صحيح.في الدالة
parseLong()يجب أن تكون قيمة الباراميترsتمثل عدد نوعهlong, أي عدد صحيح.في الدالة
parseDouble()يجب أن تكون قيمة الباراميترsتمثل عدد نوعهfloat, أي عدد عشري.في الدالة
parseDouble()يجب أن تكون قيمة الباراميترsتمثل عدد نوعهdouble, أي عدد عشري.في بعض الدوال نلاحظ أنه يوجد باراميتر إسمه
radixنوعهint.
الـradixعبارة عن عدد عادي يستخدم لتحديد طريقة تحويل قيمة الباراميترsلقيمة بدائية.
ملاحظة: عند إضافة radix فإن قيمة الباراميترsالتي نمررها تمثل عدد binary أو octal أو decimal أو hexadecimal.
الـradixيمكن أن يكون 2 أو 8 أو 10 أو 16 بالترتيب كما فوق.
قيمة الإرجاع
parseInt(String s): ترجع النصSكعدد صحيح نوعهint, أي عدد لا يحتوي على فاصلة عشرية.parseInt(String s, int radix): ترجع النصSكعدد صحيح نوعهint, أي عدد لا يحتوي على فاصلة عشرية.parseLong(String s): ترجع النصSكعدد صحيح نوعهlong, أي عدد لا يحتوي على فاصلة عشرية.parseLong(String s, int radix): ترجع النصSكعدد صحيح نوعهlong, أي عدد لا يحتوي على فاصلة عشرية.parseFloat(String s): ترجع النصSكعدد عشري نوعهfloat, أي عدد يحتوي على فاصلة عشرية.parseFloat(String s, int radix): ترجع النصSكعدد عشري نوعهint, أي عدد يحتوي على فاصلة عشرية.parseDouble(String s): ترجع النصSكعدد عشري نوعهdouble, أي عدد يحتوي على فاصلة عشرية.parseDouble(String s, int radix): ترجع النصSكعدد عشري نوعهint, أي عدد يحتوي على فاصلة عشرية.
مثال
public class Main {
public static void main(String[] args) {
System.out.println( Integer.parseInt("20") );
System.out.println( Integer.parseInt("20", 8) );
}
}
•سنحصل على النتيجة التالية عند التشغيل.
20
16