Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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_Compiler Errors - Fatal编程技术网

Java 为什么我不能将数组直接输入到打印语句中?

Java 为什么我不能将数组直接输入到打印语句中?,java,arrays,compiler-errors,Java,Arrays,Compiler Errors,我有以下代码 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 Ar

我有以下代码

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(检查相等性(a,b))

这段代码按照它应该的方式编译和工作,给了我真实的信息

我的问题:为什么我不能将要检查相等性的两个数组直接输入到print语句中?这适用于所有其他没有涉及整数和字符串的数组、ex表达式的方法。
我在这里做错了什么,或者这通常是不可能的?若然,原因为何

可以,只是整数数组构造函数不正确。尝试:

System.out.println(checkEquality(new int[]{1,2,3},new int[]{1,2,3}));

数组可以通过以下方式初始化

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规范必须说明的内容

可以在声明(§8.3、§9.3、§14.4)中指定数组初始值设定项,或将其作为数组创建表达式(§15.10)的一部分,以创建数组并提供一些初始值

数组初始值设定项以逗号分隔的表达式列表形式编写,并用大括号{和}括起来

尾随逗号可能出现在数组初始值设定项中的最后一个表达式之后,并被忽略

每个变量初始值设定项必须与数组的组件类型的赋值兼容(§5.2),否则会发生编译时错误

如果要初始化的数组的组件类型不可重新定义(§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));

System.out.println(检查相等((1),2,3),(1),2,3);)=>说真的,你没有试着编译你的代码。你不能只是编一些语法然后问编译器为什么不理解它。“我在这里做错什么了吗…”-是的。您正在尝试编写Java程序,但没有先做教程。任何半正式的Java教程或教科书都会解释创建和初始化数组对象的语法。@Mik378抱歉,这是一个打字错误并将代码粘贴到网站上!我最初使用System.out.println(checkEquality({1,2,3},{1,2,3}));但这不是编译,所以我只是按照DrJava给我的错误消息,添加了额外的括号。我编辑了这个问题来纠正这个问题,StackOverflow并不是让你自由地在网上搜索这些简单的东西。只要在谷歌上输入“java数组内联”就可以了。测试一下。