引言
最近在看RxJava2.0, 学习里面代码细节实现,以补充自己在java细节上的不足. 在DisposableHelper.java中有
public static boolean isDisposed(Disposable d) {
return d == DISPOSED;
}
这里用”==”有点意思. 因为这样他不是比较 enum 的 value 的. 而是 对象的内存地址.
Java里的“==”比较的是地址
可以查看http://www.cnblogs.com/PopShow/p/5206504.html
另外enum的equals也是相当于”==”. 不过最好还是用”==”比较好, 这样就知道他比较的是地址了.
在rxjava2.0里有很多isDisposed()
代码. 他的实现是
@Override
public boolean isDisposed() {
//这里的get()是AtomicReference<Disposable>的,
//所以他get()的是Disposable类
return DisposableHelper.isDisposed(get());
}
而我在单步debug的时候发现他get()
的Disposable明明是”DISPOSED”, 可是调用DisposableHelper.isDisposed(d)
的时候却返回false. 如下图:
从图中看到要比较的d是一个CreateEmitter
对象, 所以他们肯定不是在同一个内存地址的, 故返回false.
所以DisposableHelper.isDisposed(d)
要返回true, 那么这个d就必须只能为DisposableHelper.DISPOSED
这个对象.
mark一下.