Java 为什么将*作为主方法参数传递时会产生意外的结果?

Java 为什么将*作为主方法参数传递时会产生意外的结果?,java,Java,我遇到了一个有趣的问题。我创建了一个简单的java文件,它从命令行获取参数并执行提供的算术运算 e.g. java Test 2 3 5 + This gives output as 10 correctly 但是当我试着 java测试2 3* 它抛出NumberFormatException。然后我查看了哪些值作为参数获得pass,并看到我的java文件所在文件夹中的所有文件名都作为参数获得pass 这是典型的情况吗 我的代码是 class Test { public static

我遇到了一个有趣的问题。我创建了一个简单的java文件,它从命令行获取参数并执行提供的算术运算

e.g. java Test 2 3 5 + This gives output as 10 correctly
但是当我试着 java测试2 3* 它抛出NumberFormatException。然后我查看了哪些值作为参数获得pass,并看到我的java文件所在文件夹中的所有文件名都作为参数获得pass

这是典型的情况吗

我的代码是

class Test {

    public static void main(String args[]) {
        int sum = Integer.parseInt(args[0]);
        for (int x = 1; x < args.length - 1; x++) {
            int y = Integer.parseInt(args[x]);

            if (args[args.length - 1].equals("+")) {
                sum += y;
            } else if (args[args.length - 1].equals("-")) {
                sum -= y;
            } else if (args[args.length - 1].equals("*")) {
                sum *= y;
            } else if (args[args.length - 1].equals("/")) {
                sum /= y;
            }
        }

        System.out.println(sum);

    }
}
你的壳在干什么。您可以通过引用以下内容来解决此问题:

java Test 2 3 '*'
你的壳在干什么。您可以通过引用以下内容来解决此问题:

java Test 2 3 '*'

您是否使用unix ish系统/环境?*将被shell解释为通配符,并扩展为当前目录中的任何文件名,因此您实际上可能正在调用java 2 3 file1 file2 file3等。。。使用java 2 3\*可以解决问题为了避免这种情况,您需要执行java测试2 3'*'*不是一个数字。你正在尝试解析它int@MarcB我在Windows 7Java上运行,当您运行包含以下参数的程序时,Java正在Windows上模拟unix风格的glob扩展?或*。但在Windows上,您必须使用双引号以避免扩展,即。*您是否在unix ish系统/环境上?*将被shell解释为通配符,并扩展为当前目录中的任何文件名,因此您实际上可能正在调用java 2 3 file1 file2 file3等。。。使用java 2 3\*可以解决问题为了避免这种情况,您需要执行java测试2 3'*'*不是一个数字。你正在尝试解析它int@MarcB我在Windows 7Java上运行,当您运行包含以下参数的程序时,Java正在Windows上模拟unix风格的glob扩展?或*。但在Windows上,您必须使用双引号来避免扩展,即*