RxJava2.0中DisposableHelper的enum用==

来源:互联网 发布:暖通常用数据 编辑:程序博客网 时间:2024/04/30 23:28

引言

最近在看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一下.

原创粉丝点击