java中a=a++值為什麼沒有改變?棧運算解析

萬能的程式媛發表於2018-07-31

 

變數賦值與運算解析

 

int a = 1;

int b = a+2;

System.out.println(a);

System.out.println(b);

列印

1

3

 

JVM CLASS

解析

a

b

0  iconst_1

程式碼 int a=1; 中的常量1進棧

1

 

 

1  istore_1 [a]

彈出棧頂數值存入變數a, 也就是說a=1完成

 

1

 

2  iload_1 [a]

程式碼a+2中先將變數a值載入進運算元棧

1

1

 

3  iconst_2

程式碼a+2中再將常量2指載入進運算元棧

2

1

1

 

4  iadd

從運算元棧頂彈出2個整數進行加法運算,將結果壓入棧頂

3

1

 

5  istore_2 [b]

彈出棧頂數值存入變數b,也就是說b=3完成

 

1

3

 

 

++運算子解析_01

 

int a=1,b;

b = a++;

System.out.println(a);

System.out.println(b);

列印

2

1

 

JVM CLASS

解析

a

b

0  iconst_1

 

程式碼 int a=1; 中的常量1進棧

1

 

 

1  istore_1 [a]

 

彈出棧頂數值存入變數a, 也就是說a=1完成

 

1

 

2  iload_1 [a]

 

程式碼b=a++ 中先將變數a值載入進運算元棧

1

1

 

3  iinc 1 1 [a]

 

程式碼b=a++ 中再將變數a值累加1,也就是說a=2

1

2

 

6  istore_2 [b]

 

程式碼b=a++ 中最後將

彈出棧頂數值存入變數b,也就是說b=1完成

 

2

1

 

 

++運算子解析_02

 

int a=1;

a = a++;

System.out.println(a);

列印

1

 

JVM CLASS

解析

a

0  iconst_1

 

程式碼 int a=1; 中的常量1進棧

1

 

1  istore_1 [a]

 

彈出棧頂數值存入變數a, 也就是說a=1完成

 

1

2  iload_1 [a]

 

程式碼a=a++ 中先將變數a值載入進運算元棧

1

1

3  iinc 1 1 [a]

 

程式碼a=a++ 中再將變數a值累加1,也就是說a=2

1

2

6  istore_1 [a]

 

程式碼a=a++ 中最後將

彈出棧頂數值存入變數a,也就是說a=1完成

 

1

 

 

 

++運算子解析_03

 

int a=1;

a = ++a;

System.out.println(a);

列印

2

 

JVM CLASS

解析

a

0  iconst_1

 

程式碼 int a=1; 中的常量1進棧

1

 

1  istore_1 [a]

 

彈出棧頂數值存入變數a, 也就是說a=1完成

 

1

2  iinc 1 1 [a]

 

程式碼a=a++ 中再將變數a值累加1,也就是說a=2

 

2

3  iload_1 [a]

 

程式碼a=a++ 中先將變數a值載入進運算元棧

2

2

6  istore_1 [a]

 

程式碼a=a++ 中最後將

彈出棧頂數值存入變數a,也就是說a=2完成

 

2

 

相關文章