Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么时候是;“对象的obj实例”;Java中为false?_Java - Fatal编程技术网

什么时候是;“对象的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(不要记住这个包)
它也可能是int、double、boolean等原始对象的实例。如果这样做,它可能也会返回false

这是一个面试问题吗?“什么应该是obj以使答案为false(null以外的任何其他选项)”请原谅我的无知,双大括号表示什么?双大括号习惯用法。外括号是匿名内部类的语法(在本例中不定义任何方法)。内括号是实例初始化器(成为构造函数的一部分)。不幸的是,这在创建时打印“false”,而不是在执行instanceof检查时打印;)为什么要把泛型类搞得一团糟?这是相同的:
publicstaticvoidmain(String[]args){Object v=(Object)“42”;class Object{}System.out.println(v instanceof Object);}
@Atmocreations,我写这篇文章已经有一段时间了,但出于某种原因,我假设它不会编译。我更喜欢你的例子(越简单越好)&我已经更新了我的例子以匹配。我没看到这个帖子很老:我不想批评你。当我看到您的代码时,我不得不尝试:P从命令行编译和运行,因此这与eclipse无关。