2017-03-18 7 views
0

のために、私はコードなぜNUM + =配列[i]はループ

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; 
    } 
} 

を持っている[i]をNUM = NUM​​ +配列に異なる動作をし、私は私場合のためのループで、答えは正しくないだろうことがわかりました中古

res+=instanceNums[index]; 

なぜですか?おかげ

+0

私はそれが違う理由はありません。 –

+0

'array'、' i'と 'j'の値は何ですか? –

+3

ああ私の愚かな目を許して、私はres = + instanceNumbs [インデックス] @JamesKPolkを入れたことを実現 –

答えて

0

あなたしません予告など

x += y 

x = x + y 

に相当し+=代入演算子を用いた発現、ため、追加の値のあなたの二つの方法の間に違い、これはOracleの状態です。この理論を証明しよう。あなたがX += y、Javaコンパイラのビルドで静的メソッドaddの定義を交換する場合

public static void add(int, int); 
    Code: 
     0: iload_0 
     1: iload_1 
     2: iadd 
     3: istore_0 
     4: return 

:このクラス考えてみましょう:javapを使用してバイトコードを逆コンパイルした後

class Analysis { 
    public static void add(int x, int y) { 
     x = x + y; 
    } 
} 

を、次のような結果を見ることができます同じバイトコード。あなたの最後のコメントについて


秒がプラスに続いて割り当て=の最も単純な形式(+)記号であるとして、代入演算子+=は、=+異なっています。

+0

ここでは、 'x + = y'は実際に' x =(xの型)(x + y) 'と等価です。 – biziclop

+0

@biziclop 'x'(' x'型)にすべてのケースが格納されているという結果が得られれば、等価であることを示すのは重複しませんか? – ZenLulz

+0

この場合、 'x'と' y'は 'int'sなので、それはそうです。しかし、[一般的に](http://stackoverflow.com/questions/8710619/javas-compound-assignment-operators)、no。 – biziclop

関連する問題