2012-02-10 62 views
8

我有一个函数:为什么我不能通过这样的阵列中的Java

draw(int[] a) 
{ 
    //... 
} 

,我想在阵列中{3,4,5}传递。为什么我不能拨打电话:

draw({3,4,5}); 
+0

这里是参考:http://stackoverflow.com/questions/1610757/pass-array-to-method-java,可以帮助你http://www.jforeach.com/difference-between-object-and- reference-in-java/62 – 2012-02-10 05:36:13

回答

7

{3,4,5}的类型不明确(可能是int[],short[],等)。请尝试:

draw(new int[]{3,4,5}); 
1

因为{3,4,5}不是数组。 (如果是的话,那么的数组是什么?)

2

{3,4,5}并不反映是什么类型。你应该这样调用draw(new int[]{3,4,5});

2

因为Java是不是matlab的!您必须先创建/注册一个数组,然后才能通过!

+2

您也必须在Matlab中创建数组; Matlab只是具有更简洁的语法。 – 2012-02-10 08:20:24

1

你可以传递这样:draw(new int[]{3,4,5})

2

需要称其为draw(new int[]{3,4,5})

{3,4,5}是一个数组初始化方法,而前述new int[]这没有任何意义。您可以查看{3,4,5}作为参数传递给一个名为int[]函数返回你一个新的数组。

0

数组通过引用传递。通过按引用意味着当一个阵列被作为参数传递,它的存储器地址位置实际传递,被称为其“参考”。

  1. {3,4,5}并未反映您要使用哪种类型。
  2. 如果你想通过数组,你应该这样调用平局(新INT [] {3,4,5});所以方法可以知道你要使用数组。
1

看到其他ansers,为什么像你尝试,你不能做到这一点。

但是你可以做这样的事情:

draw(int... a) 
{ 
    //... 
} 

draw(3,4,5); 
+0

是的,这也是我的首选方式,因为你仍然可以通过“正常”的阵营。 – Axel 2012-02-10 07:29:11

0

我想给这里的一些其他的答案回应。这是一种语言设计选择,不支持数组创建的语法。但可能不是因为这个构造总是含糊不清。只是说{3,4,5}是“模棱两可”或“不反映类型”是一个过于简单化。

使用数组初始值表达式作为数组创建的简写可能存在模糊性,但它不是来自简单的例子,如{3,4,5}。您可以使用类型提升规则来定义一个规则,以便明确确定像{x,y,z}这样的数组初始值设定项的类型,就像使用类型提升规则确定算术表达式的类型(如x+y+z)一样。那么{3,4,5}int[]short[]在这个假设的情况下?这将是int[],因为3,45是整数。

即使没有接口的对象,也可以说{x,y,z,...}的类型是所有数组元素表达式可指定的最具体的通用超类。最低的共同点,如果你愿意。

但是通过接口,你实际上有多重继承,所以你可能有多个超类型,数组中的所有元素都可以指定给它们,但这两个超类型都不能相互赋值,所以你有一个真正的不明确性。

而零元素的情况下,{},现在这是不明确的。

语言设计者可能提供了一个规则说“对自己的数组初始化表达式像new T[]{...}用于初始化的类型处理”。即使使用接口,他们也可以提供它并加上“......在类型明确的情况下,否则就是编译错误”。但他们没有。也许是因为他们不想让模糊不清。也许是因为类型确定规则对编译器或开发人员而言会变得复杂。也许是因为他们不想在堆上分配一堆小阵列。但不是因为{3,4,5}根本无法解释。

相关问题