Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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 为什么num+=数组[i]的工作方式与num=num+;for循环中的数组[i]_Java - Fatal编程技术网

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)返回0instanceNums=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