在阅读 AtomicStampedReference 的源码中,在 compareAndSet() 方法发现一段代码:
return
expectedReference == current.reference &&
expectedStamp == current.stamp &&
//上方条件全部符合且为True时,执行下方代码
((newReference == current.reference &&
newStamp == current.stamp) ||
casPair(current, Pair.of(newReference, newStamp)));
即在 return 执行方法,并获取最终结果。我编写了一段代码用以测试:
public class Main {
public static void main(String[] args) {
Main main = new Main();
System.out.println(
main.executeIsTrue()
);
System.out.println();
System.out.println(
main.executeIsFalse()
);
}
boolean executeIsTrue() {
return
//这行判断结果为True,可以执行say(String word)方法
(retTrue() && retTrue()) &&
//上述两条都为True,则执行下面代码
(print("OK"));
}
boolean executeIsFalse() {
return
//这行判断结果为False,不能执行say(String word)方法
(retTrue() && retFalse()) &&
//上述两条都为True,则执行下面代码
(print("OK"));
}
boolean retTrue() { return true; }
boolean retFalse() { return false; }
boolean print(String word) { System.out.println(word); return true; }
}
得到返回结果:
OK
true
false
System.out.println(true && false); //结果为false
System.out.println(true && true); //结果为true
System.out.println(false && false); //结果为false
System.out.println(false && true); //结果为false
即充分利用判断运算符(&&、||)返回 boolean 的短路,实现在 return 中实现类似 if 语句的判断。