为什么可以';我不能在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);