英文:
What does a "+=" operator inside a ternary operator means?
问题
我在androidx.lifecycle包中找到了一段代码片段,我想知道这是什么意思。
LiveData.this.mActiveCount += mActive ? 1 : -1;
其中mActiveCount是一个整数,mActive是一个布尔值。
但是,在我写这个问题的时候,我想我已经想出了答案,所以如果我没弄错的话,"+= "运算符的作用就像我们通常使用的"= "运算符一样。
这意味着代码执行的顺序如下:
首先执行mActive ? 1 : -1;
这部分。
一旦这个表达式得到解析,接着执行LiveData.this.mActiveCount += mActive
。所以我的真正问题是:
这段代码的等价写法是否正确?:
int intToAdd = mActive ? 1 : -1;
activeCount += intToAdd;
英文:
I came across a code snippet inside the androidx.lifecycle package and I was wondering what does this means.
LiveData.this.mActiveCount += mActive ? 1 : -1;
Where mActiveCount is an int, and mActive is a boolean.
But, as I was writting this question, I think I came with the answer, so if I'm not mistaken the "+=" operator, is used as we normally use the "=" operator.
This means that the order in which the code executes is the following:
the mActive ? 1 : -1;
portion executes first.
Once this is resolved, the LiveData.this.mActiveCount += mActive
executes. So my real question is:
Is this the correct equivalence of this code?:
int intToAdd = mActive ? 1 : -1;
activeCount += intToAdd;
答案1
得分: 9
操作符+=
与三元运算符无关。
您正在使用三元运算符检查条件,并通过增加或减少1来递增或递减变量。
假设我们之前已经声明了变量a和b,那么a = a + b
等同于a += b
。
因此,您的代码LiveData.this.mActiveCount += mActive ? 1 : -1;
等同于:
if(mActive){
LiveData.this.mActiveCount += 1;
}
else{
LiveData.this.mActiveCount -= 1;
}
您下面的逻辑也是正确的:
int intToAdd = mActive ? 1 : -1;
activeCount += intToAdd;
英文:
The operator +=
is not concerned with ternary operator.
You are checking for a condition using ternary operator and incrementing or decrementing it variable by 1.
a = a + b is equivalent to a += b, assuming we have declared a and b previously.
So, your code LiveData.this.mActiveCount += mActive ? 1 : -1;
is equivalent to :-
if(mActive){
LiveData.this.mActiveCount += 1;
}
else{
LiveData.this.mActiveCount -= 1;
}
Your Logic below is also correct:-
int intToAdd = mActive ? 1 : -1;
activeCount += intToAdd;
答案2
得分: 3
这行代码会将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);
英文:
This line of code adds either 1 or -1 to mAtiveCount
, and looks at the boolean mActive
to determine whether it adds +1 or -1.
It is exactly equivalent to this chunk of code, where I removed the usage of the tertiary operator and the += operator (and made their function explicit):
int amountToAdd;
if (mActive) {
amountToAdd = 1;
} else {
amountToAdd = -1;
}
LiveData.this.mActiveCount = LiveData.this.mActiveCount + amountToAdd;
I think the line is a bit unclear, but could be made more clear with the judicious use of parenthesis:
LiveData.this.mActiveCount += (mActive ? 1 : -1);
答案3
得分: 2
是的,你说得对。在Java中有一种叫做“简写”的东西。
例如:
sum = sum + 1
可以写成 sum += 1
。
这个语句:
LiveData.this.mActiveCount += mActive ? 1 : -1;
这个语句的实际意思是:
根据 mActive
的值(true或false),要么执行 LiveData.this.mActiveCount += 1
,要么执行 LiveData.this.mActiveCount += -1
。
英文:
Yes, you are right. There is something called as shorthand
in java .
For example :
sum = sum + 1
can be written as sum += 1
.
This statement :
LiveData.this.mActiveCount += mActive ? 1 : -1;
This statement really mean to say :
Either do this LiveData.this.mActiveCount += 1
or LiveData.this.mActiveCount += -1
based on mActive
's value (true or false)
答案4
得分: 2
这可以通过查找Java运算符优先级来回答。
赋值运算符的优先级最低,其他所有操作在此之前发生。条件表达式 mActive ? 1 : -1
首先被计算。然后使用条件表达式的结果来计算 += 运算符。
英文:
This can be answered by looking up Java operator precedence.
Assignment operators have the absolute lowest precedence, everything else happens first. The conditional expression mActive ? 1 : -1
is evaluated first. then the += is evaluated using the result of the condition expression.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论