Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java数组无引用传递_Java_Arrays_Reference - Fatal编程技术网

Java数组无引用传递

Java数组无引用传递,java,arrays,reference,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" ja

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

    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;
    }
一定是这样

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

int[]array={a,b,…,n}
是一种速记初始化-您必须编写:

int[] result = insertionSort(new int[]{10,3,4,12,2});
以匿名方式初始化它

insertionSort({10,3,4,12,2})
不是有效的java,因为在方法调用中未指定类型。 JVM不知道这是什么类型的数组。它是具有双值的数组还是具有int值的数组


您可以做的是
insertionSort(newint[]{10,3,412,2})

其他人说的话没什么可补充的

然而,我相信为什么你应该使用
newint[]{10,3,4,12,2}
(就像其他人所说的那样),Java不允许你只使用
{10,3,4,12,2}
,是因为Java是强类型的

如果只使用
{10,3,4,12,2}
,则不知道数组元素的类型。它们似乎是整数,但可以是
int
long
float
double
,等等


实际上,它可能会根据方法签名推断类型,如果不合适,则会引发编译错误,但这似乎很复杂。

一个重要的注意事项:Java从不通过引用传递,只通过值传递。你说的值而不是引用到底是什么意思?因为当我将一个数组传递给一个处理这个数组的值的方法时,原始数组的值也会改变。因此,如果不想更改原始阵列,有时我需要克隆阵列!尝试在一个方法中接收一个数组并初始化该方法内部的数组(
new int[20]
或类似方法也可以),然后将一个空数组传递给该方法并在该方法外部打印该数组,它仍然是
null
,这是因为Java按值传递,不是对象的引用。+1指出Java在猜测元素类型方面没有线索。