لماذا يستخدم استخدام عدد صحيح Java ذو قيمة الافتراضية في NullPointerException؟

StackOverflow https://stackoverflow.com/questions/2437603

سؤال

أنا جديد في جافا. أنا فقط قرأت هذه المتغيرات الفئة في جافا لها قيمة افتراضية.

جربت البرنامج التالي وكان يتوقع الحصول على الإخراج كما 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) بالضبط في كل مرة بدلا من إضاعة بناء كائن على كائن صحيح جديد تماما

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top