我被问到一个问题,在java编程语言中使用counter += 5
和counter + 5
之间的区别是什么。我说他们基本上做同样的事情,但我不知道如何解释原因。我觉得有一个被认为是同一问题的速记,但现在考虑更多,我觉得我不正确。谁能给我一个简单的解释他们之间的区别?
答案 0 :(得分:3)
counter += 5
正在为计数器变量分配计数器加5的值,而counter+5
返回5加counter
的结果,但计数器变量保持不变。
例如,您有一个等于3的变量计数器。当您执行counter += 5
时,实际上是在为变量计数器分配一个新值。因此,如果计数器为5而您执行counter+=3
,则counter
现在将等于8.
在这种情况下,如果您的计数器等于3.当您执行counter+3
时,它将为该实例返回8,但您的计数器仍为3。
int counter = 3;
counter += 5;
int y = 0;
/*this will return 8, since the result of 5 and counter was newly assigned to
counter*/
System.out.println(counter);
//resetting counter value.
counter =3;
y = counter+5;
//here counter still remains at 3, because there wasn't anything assigned to it
System.out.println(counter);
//will return 8, because you assigned the result of counter and 5 to y.
System.out.println(y);
答案 1 :(得分:3)
counter += 5
修改counter
。 counter += 5
可以单独用作语句(例如代码行),因为它可以执行某些操作(将counter
增加5)。
counter + 5
不会修改任何内容。 counter + 5
只能用作语句中的表达式,因为它本身不会执行任何操作。
以下是一些展示差异的代码:
int counter = 1;
System.out.println(counter + 5); // 6
System.out.println(counter); // 1
// counter + 5; // not a valid statement
counter += 5; // counter is now 6
System.out.println(counter); // 6
System.out.println(counter += 5); // 11
System.out.println(counter); // 11
答案 2 :(得分:1)
只有JLS才能得到真正的答案!
(假设count
是数字类型。例如,如果它是String
,那么在我写这篇文章的时候,上面所有人都告诉你的一切都是错误的。)
+ =运算符
JLS 15.26.2复合赋值运算符:
E1 op = E2形式的复合赋值表达式等效于E1 =(T)((E1)op(E2)),其中T是E1的类型,但E1仅被评估一次。
以下,
[...] 左侧变量的保存值和右侧操作数的值用于执行复合赋值运算符指示的二进制运算。
[...]二进制运算的结果转换为左侧变量的类型,经过值集转换(第5.113节)到相应的标准值集(不是扩展指数值)设置),转换结果存储在变量。
中
(强调我的)。在上面的符号中,E1和E2将执行由+ =表示的操作(意味着E1 + E2)。结果存储在E1中。
+运营商
JLS 15.18.2。数值类型的加法运算符(+和 - ):
二进制+运算符在应用于两个数值类型的操作数时执行加法,产生操作数的总和。
请注意,此处没有作业。
答案 3 :(得分:0)
html = %Q{
<div class="aaa">
<div id="bbb">
<div class="pp">
<img src="/user/photo/photo01" alt="photo">
</div>
</div>
</div>
}
doc = Nokogiri(html)
doc.search('.aaa #bbb img').each |link|
puts link.attr('src')
end
是速记的,但它是counter += 5
的简写。 counter = counter + 5
只是一个表达式,你得到的是一个比counter + 5
的值大5的值,但是这个值只是留下来而没有用它做任何事情。为了使其他事情发生,需要存在另外的运算符,例如=或赋值运算符。此运算符在右侧使用表达式,在左侧使用标识符,计算表达式并将结果分配给标识符。如果没有赋值,则值不会发生变化,即使使用似乎在没有赋值的情况下更改值的方法(例如String.append()),也会在函数的代码中隐藏赋值。另外一点是,counter
可以减少(如果你真的想把它称为减少它)到counter += 5
使用了5次。