You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java面试题:用最少代码将343改为42(禁止赋值操作)

巧解Java面试题:无赋值强制输出42

嘿,这个面试题确实挺有意思的!核心限制是完全不能用任何赋值操作(包括++/--这类隐含赋值的操作),还要用最少代码让原本输出343的程序固定输出42。这里有个超简洁的方案,只需要一段静态初始化代码:

static {
    System.setOut(new PrintStream(System.out) {
        @Override
        public void println(int num) {
            super.println(42);
        }
    });
}

为什么这个方案可行?

  • 静态初始化块会在类加载阶段优先执行,比原代码的输出逻辑更早运行
  • System.setOut是方法调用,不属于题目禁止的“赋值操作”(赋值指的是给变量/字段赋值,而这里只是传递匿名对象作为参数执行方法)
  • 我们重写了PrintStream的println(int)方法:不管原代码传入的整数是343还是其他值,都会被替换成输出42
  • 整个代码块没有任何赋值行为(包括隐含的),完全符合题目要求

如果原代码的输出是调用println的其他重载方法(比如输出字符串),只需要对应重写对应的方法就行,比如重写println(Object)可以覆盖所有对象类型的输出,代码量依然极小。


内容的提问来源于stack exchange,提问作者storaged

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:48:51