有人能告诉我为什么我会因为显式设置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 0
and not 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 数组,并且允许的文字值 is 0
and not NULL
。我对吗?
正确的。int
是原始类型,这意味着它包含一个显式值(从 -2^31 到 2^31-1 的数字),而不是引用,所以它不能是null
. 如果您确实需要null
值,请使用Integer
.
你的阵列
int[] a
是原始类型int
。基元不能有null
值,而是有一个默认值 0。只有 java 中的对象才能将 null 作为value
. 原语包括:byte,short,char,int,long,float,double.
我假设是因为它是一个 int 数组,并且允许的文字值是 0 而不是 NULL。我对吗 ?
是的。
如果你想能够使用null
,就让它成为一个Integer[]
. Integer
s 是对象,可以设置为null
,与基元(int
、char
等)不同。
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.
int
是原始类型,不能是null
- 它必须有一个值。
唯一的选择是将其设置为您可以将其视为“null”的值,例如-1
.
将数组声明为: Integer[] a = new Integer[5];
其余的应该按原样工作。
这是一个int
数组。默认值int
is not null 默认值是0
,如果这是一个Integer
数组,那么你可以设置null
。
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);
}