JavaSE面试题01:自增变量
JavaSE面試題:自增變量
來源:https://runwsh.com/
- 代碼
public static void main(String[] args) {
int i=1;
i=i++;
int j=i++;
int k=i + ++i * i++;
System.out.println("i="+i);
System.out.println("j="+j);
System.out.println("k="+k);
}
- 現(xiàn)在,讓我們逐行解釋這段代碼的執(zhí)行
1.
int i = 1;:創(chuàng)建整數(shù)變量 i 并將其初始化為1。(i=1;)2.
i = i++;:這是一個(gè)有爭議的表達(dá)式。首先,它將 i 的當(dāng)前值1壓棧到一個(gè)操作數(shù)棧中。然后,它將 i 自增1,這就使得變量i=2了,但右邊的操作數(shù)棧不是沒有后續(xù)的邏輯運(yùn)算了,就會將之前壓到操作數(shù)棧的1賦值給i。所以,i 的值又變?yōu)榱?。(i=1;)
如果是`i=++i`呢,就是入棧的時(shí)候就會將自增后的變量i壓入棧中,變量i2,使得出棧的時(shí)候也是為2了。3.
int j = i++;:將 i 的當(dāng)前值1賦給 j,然后將 i 自增1。所以,j 的值是1,而 i 的值變?yōu)?。(i=2;j=1)4.
int k = i + ++i * i++;:這是一個(gè)復(fù)雜的表達(dá)式。首先看右邊的表達(dá)式,操作數(shù)棧會先將i變量入棧;也就是2先入棧,這個(gè)時(shí)候往右走++i,是將i自增后的數(shù)壓入棧中,也就是3,然后再看下一個(gè)操作數(shù)是i++;記住一點(diǎn)的就是,++i壓入棧中是將i自增后壓入棧中;i++是將i變量壓入棧中;,記住這個(gè)規(guī)則就是,繼續(xù)壓入棧中的數(shù)字是3 。所以現(xiàn)在的操作數(shù)棧中的數(shù)據(jù)從棧低到棧頂依次為:2->3->3;按照運(yùn)算符操作順序先乘后加,2+3*3=11。
打印結(jié)果:
i=4
j=1
k=11
小結(jié)
-
- 賦值=,最后計(jì)算
-
- =右邊的從左到右加載值依次壓入操作數(shù)棧
-
- 實(shí)際先算哪個(gè),看運(yùn)算符優(yōu)先級
-
- 自增、自減操作都是直接修改變量的值,不經(jīng)過操作數(shù)棧
-
- 最后的賦值之前,臨時(shí)結(jié)果也是存儲在操作數(shù)棧中
建議:《JVM虛擬機(jī)規(guī)范》關(guān)于指令的部分
總結(jié)
以上是生活随笔為你收集整理的JavaSE面试题01:自增变量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET8.0 AOT 经验分享 - 专
- 下一篇: Java多线程消费消息