繁体   English   中英

三元运算符中的“+=”运算符是什么意思?

[英]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 += 1LiveData.this.mActiveCount += -1

这可以通过查找 Java 运算符优先级来回答。

赋值运算符具有绝对最低的优先级,其他一切都先发生。 条件表达式mActive ? 1 : -1 mActive ? 1 : -1首先被评估。 然后使用条件表达式的结果计算 +=。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM