亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1974 | 回復(fù): 0
打印 上一主題 下一主題

[分享] Java篇——運(yùn)算順序的詳細(xì)挖掘 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2016-04-11 14:25 |只看該作者 |倒序?yàn)g覽
在 Java 運(yùn)算中,存在一些關(guān)系到順序的計(jì)算,這些計(jì)算順序在 C / C++語言中是不確定的,并且最后的結(jié)果值也沒有保證。不過, Java 經(jīng)過編譯之后,生成的是與平臺無關(guān)的字節(jié)碼,并且交互對象為 Java 虛擬機(jī),與底層的硬件環(huán)境無關(guān)。因此,這些運(yùn)算結(jié)果在 Java 中是確定的。
從左向右的計(jì)算順序
與 C / C++不同的是,在 Java 中,表達(dá)式的計(jì)算與結(jié)果是確定的。不受硬件環(huán)境的影響。例如,一個(gè)在 C / C++中比較常見例子:
  1. int i = 5;
  2. int j = (i++) + (i++) + (i++);
復(fù)制代碼
在 C / C++中,變量 i 與 j 的值是不確定的,根據(jù)不同的開發(fā)環(huán)境,結(jié)果也不相同。例如,在 Turbo C 中, i 的值為 8, j 的值為 15,而在 VC 中, i 的值為 8, j 的值為 18。在 Java中, i和 j 的值是確定的, i 為 8, j 為 18。
在 Java 中,操作數(shù)的計(jì)算順序是從左向右的也就是首先會計(jì)算左側(cè)的操作數(shù),然后再計(jì)算其右側(cè)的操作數(shù)。例如:
  1. int a = 3;
  2. int b = a + (++a) + (a = 1) + a;
復(fù)制代碼
執(zhí)行這兩個(gè)語句之后, a 的值為 1, b 的值為 9。因?yàn)?Java 就是從左向右進(jìn)行計(jì)算的,故最后(即最右側(cè))一條修改 a 值的表達(dá)式為:

  1. a = 1
復(fù)制代碼
而第 2 條語句也就是:
  1. int b = 3 + 4 + 1 + 1;
復(fù)制代碼
操作數(shù)從左向右的計(jì)算規(guī)則與運(yùn)算符的結(jié)合性無關(guān),就算運(yùn)算符是由右向左結(jié)合的,也會在運(yùn)算之前先確定左側(cè)的操作數(shù),請看下面的程序。
【例】 操作數(shù)的確定。
  1. 1.package chapter2;
  2. 2.
  3. 3. import java.util.Arrays;
  4. 4.
  5. 5. public class Order {
  6. 6. public static void main(String[] args) {
  7. 7. int a[] = new int[] {
  8. 8. 0, 0, 0, 0, 0, 0
  9. 9. };
  10. 10. int i = 1;
  11. 11. a[++i] = i++;
  12. 12. System.out.println("i=" + i);
  13. 13. System.out.println(Arrays.toString(a));
  14. 14. int j = 3;
  15. 15. a[j] = j = 4;
  16. 16. System.out.println("j=" + j);
  17. 17. System.out.println(Arrays.toString(a));
  18. 18. int b[] = new int[] {
  19. 19. 9, 9, 9, 9, 9, 9
  20. 20. };
  21. 21. int k = 5;
  22. 22. int c[] = a;
  23. 23. a[--k] = (a = b)[k];
  24. 24. System.out.println("k=" + k);
  25. 25. System.out.println(Arrays.toString(a));
  26. 26. System.out.println(Arrays.toString(b));
  27. 27. System.out.println(Arrays.toString(c));
  28. 28. }
  29. 29.}
復(fù)制代碼
程序運(yùn)行結(jié)果如下:
  1. i=3
  2. [0, 0, 2, 0, 0, 0]
  3. j=4
  4. [0, 0, 2, 4, 0, 0]
  5. k=4
  6. [9, 9, 9, 9, 9, 9]
  7. [9, 9, 9, 9, 9, 9]
  8. [0, 0, 2, 4, 9, 0]
復(fù)制代碼
你預(yù)測正確了嗎?對于程序第 11 行:
  1. a[++i] = i++;
復(fù)制代碼
雖然賦值運(yùn)算符是從右向左結(jié)合的,但是操作數(shù)的確定是從左向右的,也就是在賦值操作發(fā)生前,首先會確定左側(cè)的操作數(shù), i 的值為 1, ++i 的值就是 2,因此,左側(cè)的操作數(shù)是 a[2],因此,這條語句就相當(dāng)于:
  1. a[2] = 2;
復(fù)制代碼
然后 i 的值再加 1,值為 3。
第 15 行的賦值語句:
  1. a[j] = j = 4;
復(fù)制代碼
也是同樣的道理,首先確定左側(cè)操作數(shù), j 的值為 3,也就是 a[3],這相當(dāng)于:
  1. a[3] = j = 4;
復(fù)制代碼
賦值之后, j 和 a[3]的值都是 4。
同樣,第 23 行的語句:
  1. a[--k] = (a = b)[k];
復(fù)制代碼
k 的值是 5,這就相當(dāng)于:
  1. --k;
  2. int[] temp = a;
  3. a = b;
  4. temp[4] = b[4];
復(fù)制代碼
然后,原數(shù)組 a[4](也就是后來的 c[4])的值改變。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP