我试图在不使用引用的情况下传递数组,但直接使用值:
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;
}
答案 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}
,则无法确定数组元素的类型。它们似乎是整数,但它们可以是int
,long
,float
,double
等......
嗯,实际上它可能会从方法签名中推断出类型,如果它不合适则会触发编译错误,但它似乎很复杂。