这是我无法完成的考试问题。
如何通过仅在MyClass构造函数中编辑代码来获取以下Java代码以打印false?
public class MyClass{ public MyClass(){ } public static void main(String[] args) { MyClass m = new MyClass(); System.out.println(m.equals(m)); } }
不允许您覆盖equals方法或更改main方法中的任何代码。该代码必须在程序不崩溃的情况下运行。
根据我的研究,实例化类时不能将Java对象引用设置为null。所以我正式陷入了困境。
太难了!
public MyClass() { System.setOut(new PrintStream(new FilterOutputStream(System.out) { @Override public void write(byte[] b, int off, int len) throws IOException { if(new String(b).contains("true")) { byte[] text = "false".getBytes(); super.write(text, 0, text.length); } else { super.write(b, off, len); } } }, true)); }
或Paul Boddington的简化版本:
PrintStream p = System.out; System.setOut(new PrintStream(p) { @Override public void println(boolean b) { p.println(false); } });
或是AJ Neufeld的更简单建议:
System.setOut(new PrintStream(System.out) { @Override public void println(boolean b) { super.println(false); } });
按照这些思路,我会猜测:
public MyClass() { System.out.println(false); System.exit(0); }
编辑:我在Java Puzzlers中发现了一个与您的难题非常相似的难题,除了在那个问题上,唯一的限制是您不能覆盖equals,这基本上使解决方案可以重载它,而只需返回即可false。顺便提一句,我上面的解决方案也可以作为该难题的替代答案。
false