这是一道我无法完成的试题。
如何仅通过编辑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() {
new PrintStream(new ByteArrayOutputStream()).println(true);
try {
Field f = String.class.getDeclaredField("value");
f.setAccessible(true);
f.set("true", f.get("false"));
} catch (Exception e) {
}
}
之所以需要第一行,是因为在修改支持数组之前,PrintStream
类中必须遇到字符串literal“true”
。看这个问题。
我猜大致是这样的:
public MyClass() {
System.out.println(false);
System.exit(0);
}
编辑:我在Java拼图中发现了一个与你的拼图非常相似的拼图,除了这个问题,唯一的限制是你不能覆盖equals,这基本上使解决方案重载它,只返回false
。顺便说一句,我上面的解决方案也是这个谜题的另一个答案。
太难了!!
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);
}
});
问题内容: 这是我无法完成的考试问题。 如何通过仅在MyClass构造函数中编辑代码来获取以下Java代码以打印false? 不允许您覆盖equals方法或更改main方法中的任何代码。该代码必须在程序不崩溃的情况下运行。 根据我的研究,实例化类时不能将Java对象引用设置为null。所以我正式陷入了困境。 问题答案: 太难了! 或Paul Boddington的简化版本: 或是AJ Neufel
类 类是对某一事物的抽象描述,具体地讲,类是C++中的一种构造的数据类型。它即可包含描述事物的数据,又可包含处理这些数据的函数,类在程序运行时是被用作样板来建立对象的。所以要建立对象,首先必须定义类。 定义类 定义一个类的一般格式为: class 类名{ private: 成员表1; public: 成员表2; protected:
在hibernate的xml方法中,创建hibernate SessionFactory对象时使用
问题内容: 假设我们有一个类型为变量的变量,它返回一个整数数组: 使用Java 8泛型,可以使用如下构造函数引用来初始化此变量: Java编译器如何将其转换为字节码? 我知道对于其他类型,例如,它可以使用指向String构造函数的指令,这只是一种具有特殊含义的方法。 看到有构造数组的特殊说明,这对数组如何工作? 问题答案: 您可以通过反编译Java字节码来发现自己: 编译器对数组lambda()进
问题内容: 我有这样的事情: 如您所见,超类的init方法是抽象的,并在创建对象后由构造函数自动调用。 当我需要创建这种类型的对象且其结构不会及时更改时,我很好奇我是否会遇到这样的代码问题。 有什么更好的办法吗?它可以在Java中运行,但是可以在C ++和ActionScript中运行吗? 谢谢你的答案。 问题答案: 请勿从构造函数中调用过多的方法。 引用 有效Java 2nd Edition,条
生成类对象时,其成员可以用类的构造函数初始化。构造函数是与类同名的成员函数。程序员提供的构造函数在每次生成类对象(实例化)时自动调用。构造函数可以重载.提供初始化类对象的不同方法。数据成员应在类的构造函数中初始化或在生成对象之后设置其数值。 常见编程错误 6.7 类的数据成员只能在类定义中初始化。 常见编程错误 6.8 试图声明构造函数的返回类型和返回植是个语法错误。 编程技巧 6.5 适当时候(