日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

java i 什么时候变_Java中i++与++i的区别(效率分析)

發(fā)布時(shí)間:2025/3/19 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java i 什么时候变_Java中i++与++i的区别(效率分析) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

自增運(yùn)算符是困擾 C 語言與 Java 語言初學(xué)者的一大難點(diǎn),在我最初學(xué)習(xí) C 語言時(shí),一直無法理解 i++ 與 ++i 的區(qū)別。

幾年的語言學(xué)習(xí),特別是對(duì) Java 語言的學(xué)習(xí),對(duì)一些基本知識(shí)點(diǎn)有了更深入的理解,現(xiàn)在我來談?wù)?i++ 與 ++i 的區(qū)別與聯(lián)系。

注意:這里只講解 i++ 與 ++i ,i- - 與 - -i 可以類比過來

i++ 與 ++i 介紹

i++ 與 ++i 都是自增運(yùn)算符,i++ 有時(shí)被稱作后加運(yùn)算符,++i 被稱作前加運(yùn)算符。

顧名思義,后加運(yùn)算符就是先賦值,在自增長(zhǎng) 1,而前加運(yùn)算符是先自增長(zhǎng) 1,然后在賦值。

Java 中的 i++ 與 ++i

通常,i++ 與 ++i 都是出現(xiàn)在循環(huán)里面,每循環(huán)一次 i 的值都自增長(zhǎng) 1 。

/**

*@author kyyee

*

*/

public class Test {

@org.junit.Test

public void test() {

int i;

i = 0;

System.out.println("the result of i++:" + i++ + ",the current value of i:" + i);// 12

i = 0;

System.out.println("the result of ++i:" + ++i + ",the current value of i:" + i);// 14

}

}

這段代碼輸出的結(jié)果會(huì)是什么呢?

i++ 被稱為后加是有道理的,12 行代碼輸出的結(jié)果為:the result of i++:0,the current value of i:1

++i 被稱為前加,14 行代碼輸出的結(jié)果為:the result of ++i:1,the current value of i:1

i++ 與 ++i 的理解

借助數(shù)學(xué)公式來理解 i++ 和 ++i

i++

a = i++;

=> a = i ; i += 1;

++i

a = ++i;

=> i += 1; a = i;

這就是為什么代碼里打印 i++ 為 0,而打印 ++i 為 1 的原因。

結(jié)語

在實(shí)際應(yīng)用中,i++ 和 ++i 并沒有區(qū)別,最終實(shí)現(xiàn)的效果都是自增長(zhǎng)1。

具體的,當(dāng)我們?cè)?for 循環(huán)里使用 i++ 與 ++i 時(shí),不同的編譯器會(huì)對(duì)它們進(jìn)行優(yōu)化,這也就是為什么有的時(shí)候當(dāng)一段 C 代碼直接翻譯成 Java 代碼后會(huì)出現(xiàn)錯(cuò)誤的原因。

注意:++i 是左值,而 i++ 不是。

附注:討論 i++ 與 ++i 的效率

/**

*@author kyyee

*

*/

public class Test {

public static void main(String[] args) {

long startTime1 = System.nanoTime();

for (int i = 0; i < 1000000; i++) {

}

System.out.println("i++ time(ms):" + Long.toString((System.nanoTime() - startTime1) / 1000));

System.out.println("i++ time(s):" + Long.toString((System.nanoTime() - startTime1) / 1000 / 1000));

long startTime2 = System.nanoTime();

for (int i = 0; i < 1000000; ++i) {

}

System.out.println("++i time(ms):" + Long.toString((System.nanoTime() - startTime2) / 1000));

System.out.println("i++ time(s):" + Long.toString((System.nanoTime() - startTime2) / 1000 / 1000));

}

}

理論上,經(jīng)過編譯器優(yōu)化后 i++ 與 ++i 的效率幾乎一樣,實(shí)際測(cè)試,++i 效率高于 i++。

從前面的分析過程,i++在計(jì)算過程中會(huì)多一個(gè)緩存變量保存中間值,這直接導(dǎo)致i++速度慢于++i。

#i++++i

時(shí)間消耗(s)

5

3

時(shí)間消耗(s)

5

4

時(shí)間消耗(s)

5

4

時(shí)間消耗(s)

3

14

時(shí)間消耗(s)

8

1

時(shí)間消耗(s)

5

3

去掉不合理的 2 組數(shù)據(jù),100 萬次循環(huán),++i 比 i++ 平均少2s,因此編程中推薦使用 ++i。

總結(jié)

以上是生活随笔為你收集整理的java i 什么时候变_Java中i++与++i的区别(效率分析)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。