一道网红面试题

皮康龙发布

这是一道很巧妙的题目,上来的附加题就暗示了此题不简单。对于 Java 不熟悉或者编程不严谨的人很可能会给出如下的答案。

private static void method(int a, int b) {
    a *= 10;
    b *= 20;
}

但实际上,就算写「不会」也要比写上面的答案强很多。因为此函数的形参传递方法为值传递,函数内部变量值的更改是不会影响原值的,写出以上的结果只能说明编程水平太差。

那么应该怎么作答呢?一种较为简单的方法是在 method 方法中直接输出结果,然后中止程序。代码如下:

private static void method(int a, int b) {
    System.out.println("a=100\nb=200");
    System.exit(0);
}

这个答案虽然简洁,但是这真的是面试官想要考查的吗?这道题实际上想要考查的应该是方法的重写。看看这一份代码:

private static void method(int a, int b) {
    PrintStream ps = new PrintStream(System.out) {
        @Override
        public void println(String x) {
            if("a=10".equals(x)) {
                x = "a=100";
            } else {
                x = "b=200";
            }
            super.println(x);
        }
    };
    System.setOut(ps);
}

有没有觉得一下就高大上了起来?

分类: 未分类

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注