Java数组传递没有引用

时间:2012-09-30 18:05:39

标签: java arrays reference

我试图在不使用引用的情况下传递数组,但直接使用值:

    public static void main(String[] args){
            int[] result = insertionSort({10,3,4,12,2});
    }

    public static int[] insertionSort(int[] arr){
        return arr;
    }

但它返回以下异常:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
Syntax error on token(s), misplaced construct(s)
Syntax error on token ")", delete this token

当我尝试以下代码时,它有效,有人可以解释原因吗?

    public static void main(String[] args){
        int[] arr = {10,3,4,12,2};
        int[] result = insertionSort(arr);  
    }

    public static int[] insertionSort(int[] arr){
        return arr;
    }

4 个答案:

答案 0 :(得分:8)

必须是

int[] result = insertionSort(new int[]{10,3,4,12,2});

{10,3,4,12,2}是数组初始化的语法糖,它必须与声明语句一样,如下所示 -

int[] arr = {10,3,4,12,2};

也不允许以下内容 -

int[] arr; // already declared here but not initialized yet
arr = {10,3,4,12,2}; // not a declaration statement so not allowed

答案 1 :(得分:5)

insertionSort({10,3,4,12,2})

无效java,因为您未在方法调用中指定类型。 JVM不知道这是什么类型的数组。它是一个具有double值或int值的数组吗?

您可以做的是insertionSort(new int[]{10, 3 ,4 12, 2});

答案 2 :(得分:1)

int[] array = { a, b, ...., n }是一个速记初始化 - 你必须写:

int[] result = insertionSort(new int[]{10,3,4,12,2});

匿名初始化。

答案 3 :(得分:1)

没有什么可以添加到别人说的话。

但是我相信你应该使用new int[]{10,3,4,12,2}(就像其他人所说的那样)和Java不允许你只使用{10,3,4,12,2}的原因是Java是强类型的。

如果您只使用{10,3,4,12,2},则无法确定数组元素的类型。它们似乎是整数,但它们可以是intlongfloatdouble等......

嗯,实际上它可能会从方法签名中推断出类型,如果它不合适则会触发编译错误,但它似乎很复杂。