这段代码中是否有一些隐藏的含义,我在java中没有看到?它有什么用?
int[] a = new int[1];
而不仅仅是
int a;
因为从我的观点来看它是一样的吗?
答案 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[]
实际上是一个类。