我有以下代码。
import java.util.Arrays;
public class Practice {
public static void main(String[] args) {
System.out.println(checkEquality({1,2,3},{1,2,3}));
}
public static boolean checkEquality(int[] a, int[] b) {
return Arrays.equals(a,b);
}
}
我正在尝试编写一个方法来检查int类型的两个数组之间的相等性。编写的代码没有编译,这给了我第11行(具有print语句的那个)的非法表达式错误启动。但是,如果我首先在main方法中定义两个数组
int[] a= {1,2,3};
int[] b= {1,2,3};
然后更改
System.out.println(checkEquality({1,2,3},{1,2,3}));
到System.out.println(checkEquality(a,b));
代码编译并按原样运行,给我真实。
我的问题:为什么我不能直接在print语句中输入我要检查相等性的两个数组?这适用于所有其他没有数组的方法,ex表达式涉及整数和字符串。 我在这里做错了还是一般不可能?如果是这样,为什么?
答案 0 :(得分:1)
你可以,只是你的整数数组构造函数不正确。尝试:
System.out.println(checkEquality(new int[]{1,2,3},new int[]{1,2,3}));
答案 1 :(得分:1)
可以通过以下方式初始化数组......
int[] a = new int[10];
int[] a = new int[]{1,2,3,4,5,6,7,8,9,0}
int[] a = {1,2,3,4,5,6,7,8,9,0}; // anonymous array
最后一个被称为匿名数组,因为它不会让您知道它所具有的元素的大小和类型。因此,匿名数组不能直接作为方法参数传递。前两种方法可用于直接将数组作为方法参数传递。
这是Java规范必须说的
https://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html#jls-10.6
可以在声明(第8.3节,第9.3节,第14.4节)中指定数组初始值设定项,或者作为数组创建表达式(第15.10节)的一部分,以创建数组并提供一些初始值。
数组初始值设定项是以逗号分隔的表达式列表编写的,用大括号{和}括起来。
尾随逗号可能出现在数组初始值设定项中的最后一个表达式之后,将被忽略。
每个变量初始值设定项必须与数组的组件类型进行赋值兼容(第5.2节),否则会发生编译时错误。
如果要初始化的数组的组件类型不可恢复(第4.7节),则为编译时错误。
以下是可兑换的含义https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.7
由于在编译期间会删除某些类型信息,因此并非所有类型在运行时都可用。 在运行时完全可用的类型称为可再生类型。
因此,对于您的情况,您可以采用以下两种方法......
System.out.println(checkEquality(new int[]{1,2,3},new int[]{1,2,3}));
int[] a = {1,2,3};
int[] b = {1,2,3};
System.out.println(checkEquality(a,b));