java中的自增問(wèn)題介紹
運(yùn)行下面這段代碼,其結(jié)果是什么呢?
package com.test; public class Inc { public static void main(String[] args) { Inc inc = new Inc(); int i = 0; inc.fermin(i); i = i++; System.out.println(i); } void fermin(int i) { i++; } }
結(jié)果是:0
上述類似代碼在C/C++中運(yùn)行結(jié)果是:1,這是為什么呢?
這是因?yàn)镴ava使用了中間緩存變量機(jī)制:
i=i++;等同于:
temp=i; (等號(hào)右邊的i)
i=i+1; (等號(hào)右邊的i)
i=temp; (等號(hào)左邊的i)
而i=++i;則等同于:
i=i+1;
temp=i;
i=temp;
詳解:
jvm里面有兩個(gè)存儲(chǔ)區(qū),一個(gè)是暫存區(qū)(是一個(gè)堆棧,以下稱為堆棧),另一個(gè)是變量區(qū)。
jvm會(huì)這樣運(yùn)行這條語(yǔ)句:
步驟1 jvm把i的值(其值是0)拷貝到臨時(shí)變量區(qū)(temp=0)。
步驟2 變量區(qū)i的值加1,這時(shí)i的值是1。
步驟3 返回臨時(shí)變量區(qū)(temp)的值,注意這個(gè)值是0,沒(méi)修改過(guò)。
步驟4 返回值賦值給變量區(qū)的i,此時(shí)i的值被重置成0。
c/c++中沒(méi)有另外設(shè)置一個(gè)臨時(shí)變量或是臨時(shí)空間來(lái)保存i,所有操作都是在一個(gè)內(nèi)存空間中完成的,所以在c/c++中是1。
以上這篇java中的自增問(wèn)題介紹就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring BPP中如何優(yōu)雅的創(chuàng)建動(dòng)態(tài)代理Bean詳解
這篇文章主要給大家介紹了關(guān)于Spring BPP中如何優(yōu)雅的創(chuàng)建動(dòng)態(tài)代理Bean的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03如何用Java的swing編寫簡(jiǎn)單計(jì)算器
這篇文章主要給大家介紹了關(guān)于如何用Java的swing編寫簡(jiǎn)單計(jì)算器的相關(guān)資料,通過(guò)本文可以設(shè)計(jì)一個(gè)圖形界面的簡(jiǎn)易計(jì)算器,完成簡(jiǎn)單的算術(shù)運(yùn)算符,可以完成加法、減法、乘法、除法和取余運(yùn)算,需要的朋友可以參考下2023-12-12Spring Boot部署到Tomcat過(guò)程中遇到的問(wèn)題匯總
這篇文章主要給大家分享了關(guān)于Spring Boot部署到Tomcat過(guò)程中遇到的一些問(wèn)題,文中將解決的方法介紹非常詳細(xì),對(duì)同樣遇到這個(gè)問(wèn)題的朋友具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03使用@Valid+BindingResult進(jìn)行controller參數(shù)校驗(yàn)方式
這篇文章主要介紹了使用@Valid+BindingResult進(jìn)行controller參數(shù)校驗(yàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Java網(wǎng)絡(luò)編程UDP實(shí)現(xiàn)多線程在線聊天
這篇文章主要為大家詳細(xì)介紹了Java網(wǎng)絡(luò)編程UDP實(shí)現(xiàn)多線程在線聊天,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07java中對(duì)象和Map互相轉(zhuǎn)換的幾種常見(jiàn)方式舉例
Map在日常開發(fā)應(yīng)用中的頻率很高,最常用的實(shí)現(xiàn)類是HashMap和有序的TreeMap,下面這篇文章主要給大家介紹了關(guān)于java中對(duì)象和Map互相轉(zhuǎn)換的幾種常見(jiàn)方式舉例,需要的朋友可以參考下2024-01-01Java生態(tài)/Redis中使用Lua腳本的過(guò)程
這篇文章主要介紹了Java生態(tài)/Redis中如何使用Lua腳本,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03springboot實(shí)現(xiàn)讀取nacos配置文件
這篇文章主要介紹了springboot實(shí)現(xiàn)讀取nacos配置文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09