一道 Java 面试题,还有其他解法吗

2017-02-14 17:09:28 +08:00
 DeadLion
public class Test {
    public static void main(String[] args) {
        int a = 10;
        int b = 10;

        //调用 method 方法后,最后分别输出 100,200
        method(a, b);

        System.out.println("a=" + a); //a=100
        System.out.println("b=" + b); //b=200
    }

    public static void method(int a, int b) {

    }
}

有一种方法就是重写 println 方法,有能更改值的方法么? 一开始想到反射,但是方法内的局部变量好像获取不到吧。 不知道还有没有其他方法

    public static void method(int a, int b) {
        PrintStream ps = new PrintStream(System.out) {
            @Override
            public void println(String s) {
                if (s.startsWith("a")) {
                    super.println("a=100");
                }
                if (s.startsWith("b")) {
                    super.println("b=200");
                }
            }
        };

        System.setOut(ps);
    }
2026 次点击
所在节点    问与答
12 条回复
Lonely
2017-02-14 17:13:28 +08:00
直接打印两句然后 System.exit
LaudOak
2017-02-14 17:28:15 +08:00
遇到过这样的,要实现你说的效果就是函数里实现后 System.exit(0);
DeadLion
2017-02-14 17:30:52 +08:00
```
public static void method(int a, int b) {
System.out.println("a=100");
System.out.println("b=100");
System.exit(0);
}
```
@Lonely 哈哈哈 可以可以
islandev
2017-02-14 17:31:35 +08:00
可以传引用不。
DeadLion
2017-02-14 17:31:46 +08:00
@LaudOak 确实是个方法
DeadLion
2017-02-14 17:34:27 +08:00
@islandev Java 里是传值,咋传引用
islandev
2017-02-14 17:35:51 +08:00
@DeadLion 以为有 geek 方法的 可以搞
zhengjian
2017-02-14 17:36:40 +08:00
DeadLion
2017-02-14 17:47:40 +08:00
@zhengjian 哈哈哈 看来没啥其他方法了
DeadLion
2017-02-14 17:47:58 +08:00
@islandev 目前没发现
gam2046
2017-02-14 21:32:47 +08:00
面试就是绞尽脑汁出这种反人类的题么?如果以后的产品里都写这么蛋疼的代码,吃枣药丸。谁接盘谁死......

出题不从实际需求出发......
murmur
2017-02-14 21:43:05 +08:00
这是在考脑筋急转弯还是编程。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/340430

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX