Java 为什么num+=数组[i]的工作方式与num=num+;for循环中的数组[i]
我有密码Java 为什么num+=数组[i]的工作方式与num=num+;for循环中的数组[i],java,Java,我有密码 public class NumArray { int[] instanceNums; public NumArray(int[] nums) { this.instanceNums=nums; } public int sumRange(int i, int j) { if(i<0||j>instanceNums.length-1||instanceNums.length==0||instanceNums=
public class NumArray {
int[] instanceNums;
public NumArray(int[] nums) {
this.instanceNums=nums;
}
public int sumRange(int i, int j) {
if(i<0||j>instanceNums.length-1||instanceNums.length==0||instanceNums==null) return 0;
int res=0;
for(int index=i;index<=j;index++){
res=res+instanceNums[index];
}
return res;
}
}
为什么??谢谢您将不会注意到两种添加值的方法之间的任何差异,因为使用
+=
赋值运算符的表达式,例如
x += y
相当于
x = x + y
这就是甲骨文所说的。让我们来证明这个理论。考虑这个类:
class Analysis {
public static void add(int x, int y) {
x = x + y;
}
}
使用javap
反编译字节码后,您可以看到以下结果:
public static void add(int, int);
Code:
0: iload_0
1: iload_1
2: iadd
3: istore_0
4: return
如果将静态方法add
的定义替换为X+=y
,Java编译器将生成相同的字节码
关于你最后的评论,赋值运算符
+=
与=+
不同,因为第二个是最简单的赋值形式=
,后跟加号(+
)。我看不出有什么不同。我不相信你,因为数组,i
和j
值?啊,原谅我愚蠢的眼睛,我意识到我把res=+instanceNumbs[index]@JamesKPolk@ElliottFrisch是的,实际上是一样的,我在代码中输入了一个拼写错误只是一个旁注:行if(iinstanceNums.length-1 | | | instanceNums.length==0 | | instanceNums==null)返回0如果出现instanceNums=null
,code>将遇到麻烦,因为它将尝试访问instanceNums.length
此部分,然后再检查其null选择器x+=y
是否实际等同于x=(x的类型)(x+y)
,虽然在这种情况下,这确实没有什么区别。@biziclop如果结果是存储在x
(类型x
)中的所有事例,那么指出你的等价性不是多余的吗?在这种情况下,因为x
和y
都是int
s,所以应该是。但是,不是。即使y
的类型不同,求和的结果也存储在x
中,这与第一个操作数的类型相同,因为第一个操作数是x
。是的,除非y
是long
,否则x+y
的类型也是long
。无论x
是否是第一个操作数,都会发生到long
的数值提升。然后将long
结果存储在x
中,这是int
类型,需要一个缩小原语转换,而不是隐式转换。因此,明确的演员阵容。
public static void add(int, int);
Code:
0: iload_0
1: iload_1
2: iadd
3: istore_0
4: return