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



这段代码中有一些我在java中看不到的隐藏含义吗?它怎么会有用?

int[] a = new int[1];

不仅仅是

int a;

因为在我看来是一样的?

int a

定义一个基元内部

int[] a = new int[1];

定义一个有空间容纳1 int的数组。

它们是两种截然不同的东西。基元上没有方法/属性,但数组上有属性(长度)和方法(特别是克隆方法和Object的所有方法)。

阵列有点奇怪。它们在JLS中有定义。

在实践中,当您需要与API交互时,这样做是有意义的,该API接受数组并对结果进行操作。传入对具有0、1或n个属性的数组的引用是完全有效的。定义一个包含1个元素的数组可能还有其他合理的理由。

我想不出有任何用例需要定义一个带有一个元素的数组,只是为了绕过数组并获得元素。

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

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

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

大小为1的数组与单个整数不是一回事。

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

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

java中的所有数组都是对象。当声明:int x = 5;时,您正在声明一个基元类型。

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

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

相关内容

  • 没有找到相关文章

最新更新