考虑
Object obj = ....;
System.out.println(obj instanceof Object);
应该是什么,以便答案是false
(null
以外的任何其他选项)
答案 0 :(得分:39)
这是一个棘手的问题吗?
Object obj = new Object() {{ System.out.println(false); System.exit(0); }};
System.out.println(obj instanceof Object);
答案 1 :(得分:11)
这将打印false:
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);
}
}
这不是相当你所要求的,但我能想到的最好......
答案 2 :(得分:9)
如果obj
为非空
答案 3 :(得分:6)
一切都扩展了对象,所以你总是在这里得到真实(除非obj为null)。
答案 4 :(得分:1)
每个对象都来自'对象'。您的陈述将始终为真。
答案 5 :(得分:0)
无AFAIK。你有没有把它作为面试问题?
By definition,如果可以将变量转换为Object,则它应该返回true,并且所有非null都应该是可转换的。也许泛型有一些技巧,但我对此表示怀疑。
答案 6 :(得分:0)
使其成为假的唯一方法是不给它一个对象,给它一个空引用
讨论 here
答案 7 :(得分:0)
显然,如果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中对此进行了测试,但如果其他编译器的行为与此类病态示例不同,我也不会感到惊讶。
答案 8 :(得分:0)
古老的问题,但是:
答案 9 :(得分:0)
它也可以是原始对象的实例,如int,double,boolean等。如果这样做,它也可能返回false