Object[] array = new Object[]{};
System.out.println((array instanceof Serializable));//passed
System.out.println((array instanceof Cloneable));//passed
Run Code Online (Sandbox Code Playgroud)
此代码编译并运行.输出是:
true
true
Run Code Online (Sandbox Code Playgroud)
但是,此代码无法编译:
System.out.println((array instanceof Iterable));//not passed
Run Code Online (Sandbox Code Playgroud)
Eclipse编译器报告:
不兼容的条件操作数类型Object []和Iterable
我发现只能在接口Serializable
和Cloneable
使用操作之间比较数组instanceof
.有人可以告诉我为什么吗?
我有一个课程项目
class Item {
public int count;
public Item(int count) {
this.count = count;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我将在其他类的字段中引用Item
class Holder {
public Item item;
public Holder() {
item = new Item(50);
}
}
Run Code Online (Sandbox Code Playgroud)
这个新的Item对象可以安全发布吗?如果没有,为什么?根据Java Concurrency in Practice,新的Item是在没有完全构造的情况下发布的,但在我看来,新的Item是完全构造的:它的this
引用不会被转义,并且它的引用和它的状态同时发布,所以消费者线程不会看到过时的价值.或者是可见性问题.我不知道原因.