مفهوم الأعداد في جافا
أعداد: تعني 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