[英]What does a "+=" operator inside a ternary operator means?
我在 androidx.lifecycle 包中发现了一个代码片段,我想知道这是什么意思。
LiveData.this.mActiveCount += mActive ? 1 : -1;
其中 mActiveCount 是一个整数,而 mActive 是一个布尔值。
但是,当我在写这个问题时,我想我是带着答案而来的,所以如果我没有弄错的话,“+=”运算符的使用就像我们通常使用的“=”运算符一样。
这意味着代码执行的顺序如下:
mActive ? 1 : -1;
mActive ? 1 : -1;
部分首先执行。
一旦解决了这个问题, LiveData.this.mActiveCount += mActive
执行。 所以我真正的问题是:
这是此代码的正确等效项吗?:
int intToAdd = mActive ? 1 : -1;
activeCount += intToAdd;
运算符+=
与三元运算符无关。 您正在使用三元运算符检查条件并将其变量增加或减少 1。
a = a + b is equivalent to a += b, assuming we have declared a and b previously.
那么,您的代码LiveData.this.mActiveCount += mActive ? 1 : -1;
LiveData.this.mActiveCount += mActive ? 1 : -1;
相当于:-
if(mActive){
LiveData.this.mActiveCount += 1;
}
else{
LiveData.this.mActiveCount -= 1;
}
你下面的逻辑也是正确的:-
int intToAdd = mActive ? 1 : -1;
activeCount += intToAdd;
这行代码将 1 或 -1 添加到mAtiveCount
,并查看布尔值mActive
以确定它是否添加了 +1 或 -1。
它完全等同于这段代码,其中我删除了三级运算符和 += 运算符的使用(并使它们的功能显式):
int amountToAdd;
if (mActive) {
amountToAdd = 1;
} else {
amountToAdd = -1;
}
LiveData.this.mActiveCount = LiveData.this.mActiveCount + amountToAdd;
我认为这条线有点不清楚,但可以通过明智地使用括号更清楚:
LiveData.this.mActiveCount += (mActive ? 1 : -1);
你是对的。 在 java 中有一种叫做shorthand
东西。
例如 :
sum = sum + 1
可以写成sum += 1
。
这个说法 :
LiveData.this.mActiveCount += mActive ? 1 : -1;
这句话的真正意思是:
根据mActive
的值(真或假)执行此LiveData.this.mActiveCount += 1
或LiveData.this.mActiveCount += -1
这可以通过查找 Java 运算符优先级来回答。
赋值运算符具有绝对最低的优先级,其他一切都先发生。 条件表达式mActive ? 1 : -1
mActive ? 1 : -1
首先被评估。 然后使用条件表达式的结果计算 +=。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.