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

时间:2013-11-28 16:06:53

标签: java

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

e.g. java Test 2 3 5 + This gives output as 10 correctly

但是当我尝试的时候 java Test 2 3 * 它抛出NumberFormatException。然后我查看了作为参数传递的值是什么,并且看到文件夹中的所有文件名(我的java文件所在的文件名)都作为参数传递。

这是典型情况吗?

我的代码是

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);

    }
}

1 个答案:

答案 0 :(得分:5)

您的shell正在执行glob expansion。您可以通过引用来解决此问题:

java Test 2 3 '*'