【发布时间】:2009-08-27 14:22:57
【问题描述】:
考虑
Object obj = ....;
System.out.println(obj instanceof Object);
obj 应该是什么,所以答案是 false(null 以外的任何其他选项)
【问题讨论】:
-
这是一个面试题吗?
标签: java
考虑
Object obj = ....;
System.out.println(obj instanceof Object);
obj 应该是什么,所以答案是 false(null 以外的任何其他选项)
【问题讨论】:
标签: java
这是一个棘手的问题吗?
Object obj = new Object() {{ System.out.println(false); System.exit(0); }};
System.out.println(obj instanceof Object);
【讨论】:
这将打印错误:
public final class Foo {
static private final class Object {
}
static public void main(String[] args)
{
java.lang.Object o = new java.lang.Object();
System.out.println(o instanceof Object);
}
}
这不是您要求的完全,但我能想到的最好的......
【讨论】:
如果obj 不为空,这将从不返回 false
【讨论】:
一切都扩展了 Object,所以在这里你总是会得到 true(除非 obj 为 null)。
【讨论】:
每个对象都源自“对象”。您的陈述将始终正确。
【讨论】:
无 AFAIK。你把这个当作面试问题了吗?
By definition,如果您可以将变量转换为 Object,它应该返回 true,并且所有非空值都应该是可转换的。也许泛型有一些技巧,但我对此表示怀疑。
【讨论】:
让它为假的唯一方法是不给它一个对象,给它一个空引用
讨论here
【讨论】:
很明显,如果Object 引用java.lang.Object(由引导类加载器定义)这是不可能的,因为进程中的每个类都必须从java.lang.Object 下降
但是,您可以在内部范围内定义名为 Object 的其他内容,隐藏 java.lang.Object。
这是一个示例,其中名称 Object 在方法开头引用 java.lang.Object,稍后引用本地类:
public static void main(String[] args) {
Object value = "42"; class Object {}
System.out.println(value instanceof Object);
}
这是一个小小的欺骗,因为value 的声明不是一个单独的语句,而是一个后跟本地类定义的语句。
我在 Eclipse 3.5.0 中对此进行了测试,但如果其他编译器在类似这样的病态示例中表现不同,我不会感到惊讶。
【讨论】:
public static void main(String[] args) { Object v = (Object)"42"; class Object {} System.out.println(v instanceof Object); }
老问题,但是:
【讨论】:
它也可以是 int、double、boolean 等原始对象的实例。如果这样做,它也可能会返回 false
【讨论】: