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

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

int[] a = new int[1]; 

而不仅仅是

 int a; 

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

 int a 

定义一个原始int。

 int[] a = new int[1]; 

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

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

数组是一个奇怪的野兽。 它们在JLS中定义。

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

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

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

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

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

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

例如,如果你有一个函数对一个数组的所有元素执行一个函数,但是你只想在一个值上计算它,你应该传递一个int [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 

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

看到这个 。

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

声明int[] x = new int[]; 你正在创建一个int[]类型的对象。

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