Явная установка значения NULL для элемента массива

Может кто-нибудь сказать мне, почему я получаю ошибку компиляции для явной установки значения NULL для элемента массива?

int[] a = new int[5];

a[0] = 1;
a[2] = 'a';
a[3] = null; //Compiler complains here


for (int i : a) System.out.println(i);

Я предполагаю, что это массив int, а разрешенное буквальное значение равно 0, а не NULL. Я прав?


person UnderDog    schedule 18.08.2013    source источник
comment
Это потому, что int является примитивом. Должен работать с Integer вместо int   -  person d'alar'cop    schedule 18.08.2013
comment
Дубликат: stackoverflow.com/questions/11047276/   -  person d'alar'cop    schedule 18.08.2013
comment
Подсказка: что бы вы ожидали, если бы написали int x = null;? Если вы понимаете, почему это не разрешено, случай массива точно такой же. Массив — это просто множество переменных, к которым вы можете получить доступ по индексу.   -  person Jon Skeet    schedule 13.10.2020


Ответы (8)


Правильный. int — это примитивный тип, что означает, что он содержит явное значение (число от -2^31 до 2^31-1), а не ссылку, поэтому он не может быть null. Если вам действительно нужны значения null, используйте Integer.

person chrylis -cautiouslyoptimistic-    schedule 18.08.2013

Ваш массив

int[] a

имеет примитивный тип int. Примитивы не могут иметь значение null, но вместо этого имеют значение по умолчанию 0. Только объекты в java могут иметь значение null как value. Примитивы включают: byte,short,char,int,long,float,double.

person rocketboy    schedule 18.08.2013

Я предполагаю, что это массив int, а допустимое буквальное значение равно 0, а не NULL. Я прав ?

да.

Если вы хотите иметь возможность использовать null, сделайте его Integer[]. Integer — это объекты, которым можно задать значение null, в отличие от примитивов (int, char и т. д.).

person tckmn    schedule 18.08.2013

int — это примитивный тип, который не может быть null — он должен иметь значение.

Единственный вариант — установить для него значение, которое можно обработать как "ноль", например -1.

person Bohemian♦    schedule 18.08.2013
comment
Или используйте Integer вместо этого - person tckmn; 18.08.2013

     int[] a = new int[5];

Объявленный массив имеет тип int, который является примитивным типом, таким как byte, short, long, float, double, char и boolean. Примитивы не могут иметь нулевое значение, вместо этого они имеют значение по умолчанию, как указано ниже.

    byte = 0; 
    short = 0;
    int = 0;
    long = 0l;
    float = 0.0f
    double = 0.0d
    boolean = false;

Формула диапазона для примитивных типов приведена ниже. Примитивы могут принимать только значения, попадающие в этот диапазон.

    -2^(N - 1) to 2^(N - 1)-1 
    where N stands for no. of bits that each primitive type takes

Только объекты в java могут иметь значение null. Если вы все равно этого хотите, лучше используйте классы-оболочки, такие как

    Byte, Short, Integer, Long, Character, Boolean, etc.
person Rudra    schedule 18.08.2013

Это массив int. значение по умолчанию int не равно нулю, значение по умолчанию равно 0. Если это массив Integer, вы можете установить null.

person Ruchira Gayan Ranaweera    schedule 18.08.2013

Объявите массив как: Integer[] a = new Integer[5];

Остальное должно работать как есть.

person rohit agrawal    schedule 01.06.2016

Элементы массива Integer являются типами значений (тип Int), поэтому они хранят назначенные им значения в ячейках памяти. Если вы хотите подделать нулевое значение, вы можете попробовать присвоить элементам значение -1.

Попробуйте что-то вроде этого...

public static void main(String[]args){
        int a[][]={{4,3,2,1},{0,-1,-1,-1},{0,-1,-1,-1}};
        printStatus(a);
        procesar(a);
        printStatus(a);
    }

    public static void procesar (int a[][])
{
int temp, tope0, tope1, tope2;
tope0 = ((a[0].length)-1);
tope1 = 0;
tope2 = 0;

while(a[0][tope0] >= 0){

    if(a[2][tope2]==0){
        System.out.println(a[2][tope2]);
        temp=a[0][tope0];
        a[2][tope2] = temp;
        a[0][tope0] = 0;    
        tope0= tope0 -1;    
        tope2 = tope2 +1 ;
        System.out.println(a[0][tope0]+ " "+a[1][tope1] +" "+ a[2][tope2 -1] );
        printStatus(a);
    }
    System.out.println(a[0][tope0]+ " "+ a[2][(tope2-1)] );
    if((a[2][(tope2 -1)]> a[0][tope0])){
        temp=a[0][tope0];
        a[2][tope2] = temp;
        a[0][tope0] = 0;    
        tope0= tope0 -1;    
        tope2 = tope2 +1 ;
        System.out.println(a[0][tope0]+ " "+a[1][tope1] +" "+ a[2][tope2 -1] );
        printStatus(a);
    }

    if(a[1][tope1]==0){
        System.out.println(a[1][tope1]);
        temp = a[0][tope0];
        a[1][tope1]= temp;
        a[0][tope0]= 0;
        tope0= tope0 -1;
        tope1 = tope1 +1;
        System.out.println(a[0][tope0]+ " "+a[1][tope1 - 1] +" "+ a[2][tope2 -1] );
        printStatus(a);
    }
    System.out.println(a[0][tope0]+ " "+ a[1][(tope1-1)] );
    if(a[1][(tope1-1)]> a[0][tope0]){
        temp = a[0][tope0];
        a[1][tope1]= temp;
        a[0][tope0]= 0;
        tope0= tope0 -1;
        tope1 = tope1 +1;
        System.out.println(a[0][tope0]+ " "+a[1][tope1 - 1] +" "+ a[2][tope2 -1] );
        printStatus(a);
    }
person Pedro Salas    schedule 09.05.2017