لماذا يستخدم استخدام عدد صحيح Java ذو قيمة الافتراضية في NullPointerException؟
-
19-09-2019 - |
سؤال
أنا جديد في جافا. أنا فقط قرأت هذه المتغيرات الفئة في جافا لها قيمة افتراضية.
جربت البرنامج التالي وكان يتوقع الحصول على الإخراج كما 0
, ، والتي هي القيمة الافتراضية على عدد صحيح، لكنني أحصل على NullPointerException
.
ماذا ينقصني؟
class Test{
static Integer iVar;
public static void main(String...args) {
System.out.println(iVar.intValue());
}
}
المحلول
أنت على حق، متغيرات الطبقة غير المهيمية في Java لها قيمة افتراضية مخصصة لهم. Integer
اكتب جافا ليست كما int
. Integer
هو فئة المجمع التي يلف قيمة النوع البدائي int
في كائن.
في حالتك iVar
هو إشارة إلى Integer
الكائن الذي لم يذكر. مراجع غير مهيأة الحصول على القيمة الافتراضية لل null
وعند محاولة تطبيق intValue
() طريقة على مرجع فارغ تحصل عليه NullPointerException
.
لتجنب هذه المشكلة تماما تحتاج إلى جعل المتغير المرجعي يشير إلى Integer
كائن كما:
class Test {
// now iVar1 refers to an integer object which wraps int 0.
static Integer iVar1 = new Integer(0);
// uninitialized int variable iVar2 gets the default value of 0.
static int iVar2;
public static void main(String...args) {
System.out.println(iVar1.intValue()); // prints 0.
System.out.println(iVar2); // prints 0.
}
}
نصائح أخرى
هذا يعني انه iVar
باطل. في Java، لا يمكنك استدعاء طرق على مرجع فارغ، فهو يولد NullPointerException الذي تراه.
private Integer amount=Integer.valueOf(0);
private Integer points=Integer.valueOf(0);
على وجه الخصوص، لماذا يجب عليك استخدام Integer.valueOf(int)
بدلا من عدد صحيح جديد (int): التخزين المؤقت.
هذا البديل من valueOf
تمت إضافته في JDK 5 إلى بايت، قصيرة، عدد صحيح، وطويل (موجود بالفعل في حالة تافهة في منطقية منذ JDK 1.4). كل هذه، بالطبع، كائنات ثابتة في جافا. اعتاد أن يكون ذلك إذا كنت بحاجة إلى كائن عدد صحيح من Int، فأنت تقوم ببناء عدد صحيح جديد. ولكن في jdk 5+، يجب عليك حقا استخدام قيمة ValueOf لأن عددا صحيحا الآن يخبط الكائنات الصحيحة بين -128 و 127 ويمكنه يدك مرة أخرى نفس كائن صحيح (0) بالضبط في كل مرة بدلا من إضاعة بناء كائن على كائن صحيح جديد تماما