Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有什么区别+;=和+;?_Java - Fatal编程技术网

Java 有什么区别+;=和+;?

Java 有什么区别+;=和+;?,java,Java,有人问我一个问题,在java编程语言中使用counter+=5和counter+5有什么区别。我说他们基本上做同样的事情,但我不知道如何解释原因。我觉得其中一个被认为是同一个问题的速记表达,但现在再仔细想想,我觉得我不正确。有人能给我一个简单的解释他们之间的区别吗 计数器+=5将任何计数器加5的值赋给计数器变量,而计数器+5返回5加计数器的结果,但计数器变量保持不变 +=操作员 例如,变量计数器等于3。当您执行计数器+=5时,实际上是在为变量计数器分配一个新值。所以,如果计数器是5,并且您执行

有人问我一个问题,在java编程语言中使用
counter+=5
counter+5
有什么区别。我说他们基本上做同样的事情,但我不知道如何解释原因。我觉得其中一个被认为是同一个问题的速记表达,但现在再仔细想想,我觉得我不正确。有人能给我一个简单的解释他们之间的区别吗

计数器+=5
将任何计数器加5的值赋给计数器变量,而
计数器+5
返回5加
计数器的结果,但计数器变量保持不变


+=操作员 例如,变量计数器等于3。当您执行
计数器+=5
时,实际上是在为变量计数器分配一个新值。所以,如果计数器是5,并且您执行
计数器+=3
计数器现在将等于8


+无等号运算符 在这种情况下,如果计数器等于3。当您执行
counter+3
操作时,该实例将返回8,但您的计数器仍然是3

用于演示差异的代码:
计数器+=5
修改
计数器
code+=5
可以单独用作语句(例如代码行),因为它做了一些事情(将
counter
增加5)

计数器+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

counter+=5
是速记,但它是
counter=counter+5
的速记
counter+5
只是一个表达式,您得到的值比
counter
的值大5,但是这个值被留下了,并且没有做任何处理。为了让其他事情发生,需要存在一个额外的运算符,例如=,或赋值运算符。此运算符在右侧获取表达式,在左侧获取标识符,计算表达式并将结果分配给标识符。如果没有赋值,值就不会改变,即使您使用的方法似乎没有赋值就改变了值(例如String.append()),函数的代码中也隐藏着赋值。另外一个事实是,
计数器+=5
可以减少(如果你真的想称之为减少)到
计数器+
使用5次。

只有JLS持有正确答案

(假设
count
是一个数字类型。例如,如果它是
字符串
,那么在我写这篇文章时,上面所有人告诉你的一切都是错误的。)

+=运算符

JLS 15.26.2复合分配操作员:

形式为E1 op=E2的复合赋值表达式等价于E1=(T)((E1)op(E2)),其中T是E1的类型,但E1仅计算一次

随后,

[…]左侧变量的保存值和右侧操作数的值用于执行复合赋值运算符所指示的二进制运算

[…]将二进制运算的结果转换为左侧变量的类型,并进行值集转换(§5.1.13)至适当的标准值集(非扩展指数值集),并且将转换结果存储到变量中

(我的重点)。在上述表示法中,E1和E2将执行+=(表示E1+E2)指示的操作。结果存储在E1中

+操作员

JLS 15.18.2。数字类型的加法运算符(+和-):

二进制+运算符应用于两个数字类型的操作数时执行加法,生成操作数之和


注意这里没有赋值。

计数器+=5
计数器=计数器+5
!=
counter+5
一个更新变量,另一个不更新,
counter+=5
基本上是
counter=counter+5
这里还有人提到感兴趣的关键字:赋值。查一下作业,这是我刚才被问到的。我知道他们做同样的事情,但我觉得还有更多。@MarcusBurkhart你没抓住重点。他们不做同样的事情。不是“加5到计数器”,而是加5和计数器。当我们想要区分分配和不分配时,说“to”是非常混乱的。谢谢。我只是错过了更新计数器变量的最后一部分。我将接受你的答复10min@MarcusBurkhart“我会在10分钟内接受答案”即使这个答案是正确的(只有在凯瑟的评论下),您通常会希望等待,看看是否会出现更多对您更满意的答案。也许他们更全面,有代码示例等。这当然只是一个建议。@MarcusBurkhart你应该接受我的答案,Tim s已经有足够的分数了!!:)<代码>系统输出打印项次(计数器+=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