为什么可以';我不能在Java中传递这样的数组吗
我有一个功能:为什么可以';我不能在Java中传递这样的数组吗,java,arrays,Java,Arrays,我有一个功能: draw(int[] a) { //... } 我想传入数组{3,4,5}。为什么我不能打电话: draw({3,4,5}); 因为{3,4,5}不是数组。(如果是,它将是一个什么数组?{3,4,5}不反映类型是什么。您应该这样调用draw(newint[]{3,4,5})因为Java不是matlab!必须先创建/注册阵列,然后才能传递它 您可以这样传递它:draw(newint[]{3,4,5})您需要将其称为draw(newint[]{3,4,5}) {3,4,5}
draw(int[] a)
{
//...
}
我想传入数组{3,4,5}
。为什么我不能打电话:
draw({3,4,5});
因为
{3,4,5}
不是数组。(如果是,它将是一个什么数组?{3,4,5}
不反映类型是什么。您应该这样调用draw(newint[]{3,4,5})代码>因为Java不是matlab!必须先创建/注册阵列,然后才能传递它 您可以这样传递它:draw(newint[]{3,4,5})
您需要将其称为draw(newint[]{3,4,5})
{3,4,5}是一种数组初始化方法,没有前面的newint[]
就没有意义。您可以将{3,4,5}视为名为int[]
的函数的参数,该函数将返回一个新数组。类型{3,4,5}
不明确(可能是int[]
,短[]
,长[]
,等等)。尝试:
数组是通过引用传递的。通过引用传递意味着当数组作为参数传递时,实际上传递了它的内存地址位置,称为它的“引用”
{3,4,5}不能反映您要使用的类型
如果您想要传递数组,您应该像这样调用draw(newint[]{3,4,5});所以方法可以知道您将要使用数组
看看其他的答案,为什么你不能像你尝试的那样去做
但你可以这样做:
draw(int... a)
{
//...
}
draw(3,4,5);
我想在这里回答其他一些问题。在创建数组时不支持这种语法是一种语言设计选择。但可能不是因为这个结构总是模棱两可的。仅仅说{3,4,5}
是“模棱两可”或“不反映类型”是过于简单化了
数组初始值设定项表达式作为数组创建的简写可能会产生歧义,但它不是来自像{3,4,5}
这样的简单情况。您可以定义一个规则来明确地确定数组初始值设定项(如{x,y,z}
)的类型,就像使用类型提升规则确定算术表达式(如x+y+z
)的类型一样。那么在这个假设的情况下,{3,4,5}
是在int[]
中还是在short[]
中?这将是一个int[]
,因为3
、4
和5
都是int
即使对象没有接口,也可以说a{x,y,z,…}
的类型是所有数组元素表达式都可分配到的最特定的公共超类。最低公分母,如果你愿意的话
但是对于接口,实际上有多重继承,因此可能有多个超类型,数组的所有元素都可分配给这些超类型,但这两个超类型都不能相互分配,因此存在真正的歧义
零元素的情况,{}
,现在是不明确的
语言设计者可以提供一条规则,说明“数组初始值设定项表达式本身被视为初始值设定项类型的newt[]{…}
”。即使使用接口,他们也可以提供它并附加“…在类型明确的情况下,否则这是一个编译错误”。但他们没有。也许是因为他们不想让这种模棱两可。可能是因为类型确定规则对于编译器或开发人员来说太复杂了。也许是因为他们不想让在堆上分配一堆小数组变得太容易。但这并不是因为{3,4,5}
根本无法解释。这里是ref:可以帮助您是的,这也是我的首选方法,因为您仍然可以传递“正常”arrray。您还必须在Matlab中创建数组;Matlab只是提供了更简洁的语法。
draw(int... a)
{
//...
}
draw(3,4,5);