什么时候是;“对象的obj实例”;Java中为false?
考虑什么时候是;“对象的obj实例”;Java中为false?,java,Java,考虑 Object obj = ....; System.out.println(obj instanceof Object); obj应该是什么,以便答案是false(除null之外的任何其他选项)每个对象都从“object”派生。您的语句将始终为真。一切都扩展了对象,因此您在这里将始终为真(除非obj为null)。如果obj为非null,这将永远不会返回false。你把这当作面试问题了吗 Object obj = new Object() {{ System.out.println(f
Object obj = ....;
System.out.println(obj instanceof Object);
obj应该是什么,以便答案是
false
(除null
之外的任何其他选项)每个对象都从“object”派生。您的语句将始终为真。一切都扩展了对象,因此您在这里将始终为真(除非obj为null)。如果obj
为非null,这将永远不会返回false。你把这当作面试问题了吗
Object obj = new Object() {{ System.out.println(false); System.exit(0); }};
System.out.println(obj instanceof Object);
,如果可以将变量强制转换为对象,则应返回true,并且所有非空值都应是可转换的。或许泛型有一些技巧,但我对此表示怀疑 这是一个骗人的问题吗
Object obj = new Object() {{ System.out.println(false); System.exit(0); }};
System.out.println(obj instanceof 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
的声明不是单个语句,而是后跟本地类定义的语句
我在Eclipse3.5.0中对此进行了测试,但如果其他编译器在这样的病态示例中表现不同,我也不会感到惊讶。这将打印错误:
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为null
- 如果您在90年代末使用jview并尝试使用Variant(不要记住这个包)李>
publicstaticvoidmain(String[]args){Object v=(Object)“42”;class Object{}System.out.println(v instanceof Object);}
@Atmocreations,我写这篇文章已经有一段时间了,但出于某种原因,我假设它不会编译。我更喜欢你的例子(越简单越好)&我已经更新了我的例子以匹配。我没看到这个帖子很老:我不想批评你。当我看到您的代码时,我不得不尝试:P从命令行编译和运行,因此这与eclipse无关。