[英]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.