6

有人能告诉我为什么我会因为显式设置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 数组,并且允许的文字值 is 0and not NULL。我对吗?

4

8 回答 8

7

正确的。int是原始类型,这意味着它包含一个显式值(从 -2^31 到 2^31-1 的数字),而不是引用,所以它不能是null. 如果您确实需要null值,请使用Integer.

于 2013-08-18T07:36:54.367 回答
5

你的阵列

int[] a

是原始类型int。基元不能有null值,而是有一个默认值 0。只有 java 中的对象才能将 null 作为value. 原语包括:byte,short,char,int,long,float,double.

于 2013-08-18T07:36:13.323 回答
3

我假设是因为它是一个 int 数组,并且允许的文字值是 0 而不是 NULL。我对吗 ?

是的。

如果你想能够使用null,就让它成为一个Integer[]. Integers 是对象,可以设置为null,与基元(intchar等)不同。

于 2013-08-18T07:36:23.887 回答
1
     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.
于 2013-08-18T08:32:22.757 回答
1

int原始类型,不能是null- 它必须有一个值。

唯一的选择是将其设置为您可以其视为“null”的值,例如-1.

于 2013-08-18T07:38:44.957 回答
1

将数组声明为: Integer[] a = new Integer[5];

其余的应该按原样工作。

于 2016-06-01T06:47:46.183 回答
0

这是一个int数组。默认值intis not null 默认值是0,如果这是一个Integer数组,那么你可以设置null

于 2013-08-18T08:31:16.460 回答
0

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);
    }
于 2017-05-09T13:51:46.907 回答