为什么int [] a = new int [1]而不仅仅是int?

时间:2011-06-03 02:57:37

标签: java integer

这段代码中是否有一些隐藏的含义,我在java中没有看到?它有什么用?

int[] a = new int[1];

而不仅仅是

int a;

因为从我的观点来看它是一样的吗?

7 个答案:

答案 0 :(得分:16)

int a

定义了一个原语int。

int[] a = new int[1];

定义一个数组,其空间可容纳1个int。

它们是两个非常不同的东西。原语上没有方法/属性,但是数组上有属性(长度)和方法(特别是它的克隆方法,以及Object的所有方法)。

阵列有点怪异的野兽。它们在JLS中定义。

实际上,当您需要与采用数组并对结果进行操作的API进行交互时,这样做是有意义的。传递对具有0,1或n属性的数组的引用是完全有效的。可能有其他正当理由来定义具有1个元素的数组。

我想不出你想要用一个元素定义数组的任何用例,只是绕过数组并获取元素。

答案 1 :(得分:6)

一个在堆栈上,一个在堆上。

答案 2 :(得分:4)

一个区别是您可以通过更改arg[0]来编写一个更改其int参数的方法。在我看到的一些代码中使用了这个技巧。例如,它允许您返回boolean表示成功或失败以及int值,这些值用于其他目的。没有这个技巧,你必须返回某种包含这两个值的对象。

答案 3 :(得分:1)

大小为1的数组与单个整数不同。

即使它们携带相同的信息,它们也是不同的类型,因此您可以在不同的环境中使用它们。

例如,如果你有一个函数对数组的所有元素执行一个函数,但你只想在一个值上计算它,你应该传递一个int [1],因为该函数需要一个数组并希望知道它应该处理多少个值。

答案 4 :(得分:1)

int a;

定义了一个可以保存int

的变量
int[] a;

定义了一个可以包含int

数组的变量
int[] a = new int[1];

执行上述操作,但也通过实际创建一个数组(大小为1 - 它可以容纳1个int)来初始化它,并定义变量a来保存该数组,但不定义数组中的内容。

int[] a = new int[1]{1};

执行上述操作,但也定义了数组中的内容:int 1。

我认为它做了类似的事情,因为该空间被分配给1个int,但该数组也定义了一个数组。我想你可以说这些是相似的:

int a = 1;
int b = a + 1;
// now b == 2

int[] a = new int[1]{1};
int b = a[0] + 1;   
// now b == 2

答案 5 :(得分:0)

当您需要通过引用传递原始数据类型时使用它。

请参阅this

答案 6 :(得分:0)

java中的所有数组都是对象。当声明:int x = 5;时,你声明了一个原始类型。

声明int[] x = new int[];时,您正在创建类型为int[]的对象。

所以int[]实际上是一个类。