簡體   English   中英

java數組中的意外增量結果

[英]unexpected increment result in java array

在學習如何聲明,初始化和訪問java中的數組元素時,我編寫了這個簡單的代碼:

class ArrayAccess{

    public static void main(String args[]){
        int[] a;
        a = new int[4];
        a[0] = 23;
        a[1] = a[0]*2;
        a[2] = a[0]++;
        a[3]++;
        int i = 0;
        while(i < a.length){
            System.out.println(a[i]);
            i++;

        }
    }
}

但我得到了意想不到的輸出。

我得到的輸出是:

24     

46

23

1

所以,

為什么24而不是23作為a[0]的值? 如果這是a[2] a[0]增量,則為什么a[1]的元素是46而不是48

為什么23而不是24作為a[2]的值?

a[2] = a[0]++; 將值復制到[2]后,遞增a [0]

它與以下相同:

a[2] = a[0];
a[0]+=1;

如果要在賦值前增加值,請使用a[2] = ++(a[0]);

這與以下相同:

a[0]+=1;
a[2] = a[0];
a[2] = a[0]++; 

  int temp = a[0];
  a[2] = a[0];
  a[0] = temp + 1;

由於以下行:

a[2] = a[0]++;

增量(++)具有增加右側值的副作用。 否則你應該使用:

a[2] = a[0]+1;

另一個例子是++編號的類似概念。 如果你寫了:

a[2] = ++a[0];

a [0]將遞增,然后添加到[2]。 所以在[2]中你會得到:24

你所需要的小修改

class ArrayAccess {

public static void main(String args[]){
   int referenceNumber= 23;
    int[] a;
    a = new int[4];
    a[0] = referenceNumber;
    a[1] = a[0]*2;
    a[2] = referenceNumber++;
    a[3]++;
    int i = 0;
    while(i < a.length){
        System.out.println(a[i]);
        i++;

    }
}

}

現在讓我們來問問題

為什么24而不是23作為a [0]的值? 如果這是[2]的[0]的正確增量,則為什么[1]的元素是46而不是48。

是的,這是由於[2]的a [0]的增量。 但關鍵是你正在做[1] = a [0] * 2的那一刻; 它還沒有增加。

為什么23而不是24作為a [2]的值?

你正在做[2] = a [0] ++; 發生的是a [0]的第一個值被分配給[2],然后最終a [0]的值增加而不是[2]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM