2013-10-08 57 views
0

我有一个简单的问题,我似乎没有找到答案。我认为这很简单,我可以把它当作语言怪癖。数组初始化零与分配零点

int[] newArray=new int[5]; 

将初始化一个数组,并在所有5个位置全部为零。

newArray[4]=0; 
//versus not assigning any value to specific position newArray[4] 

是两样吗?如果不是,如何区分这两者?

如何区分在创建数组时自动放置的零与在某个点在程序中分配的零之间的区别?

我问这个问题的主要原因是我有一个程序,它可以在数组中随机的位置赋予一些整数值,也可以是0.在搜索时,我想知道哪些零是由程序分配的,哪些是初始化的零。

+3

结果是一样的。全部0都是相同的。 – Thilo

+1

除了那讨厌的负面0 –

回答

2

由于您将int s放入您的阵列中,因此它们是相同的,因为默认值int是。您将无法区分这两者,因为等于。

如果您使用Integer但是该阵列将被初始化为null s。在这种情况下,您可以判断是否设置了值。

如果你想能够区分你可以使用的参考。

1

int[] newArray=new int[5]默认情况下会将所有元素初始化为0。

newArray[4]=0会将第5个元素的值设置为0.其他所有元素的默认值都是默认值。所以两者没有区别。

改为了解该集合newArray[4]=10

现在数组内容{0,0,0,0,10}

1

为什么这么说怪癖?很明显,每个引用和原语在Java中都有一个初始默认值。对于int,它是0。对于参考,它是null

0

如果您将变量作为类的成员实例化,则它将具有默认值:0表示数字,null表示对象。但是如果你在一个方法中声明了这个变量,编译器不会为这个变量赋一个默认值,所以它的内容被设置为undeffded,直到你设置它为止。

所以,如果你在一个方法里面做,是不等价的;-)

+0

所以,int [] newArray = new int [5];里面的方法将离开所有的位置未定义! –