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在猜测元素类型方面没有线索。