java中i i 的問題

2021-08-31 18:24:27 字數 769 閱讀 7437

昨天看到下面這段**,分享出來給大家看看,大家也可以討論討論。

int i = 0;

i = i++;

system.out.println("i的值是 "+i);

根據我們通常所知道的後自增先使用後增加的道理,i++在使用後i自身會增加乙個數值,初始值為0時,自增後就是1,那麼輸出的結果應該是1.但實際上這題的結果卻是0。

這是因為jvm在處理i = i++時, 會建立乙個臨時變數來接收i++的的值,然後返回這個臨時變數的值,返回的值再被等號左邊的變數接收了,這樣就是說i雖然自增了但是又被賦值了0,這樣輸出的結果自然就是0了。

不妨我們用temp臨時變數來接收i++的值,來看一下結果。

可以看到temp的結果就是0,也就是說賦值號右邊傳遞過來的是i未自增前的值,這符合後自增運算子先使用後增加的原則,這時候我們再輸出一下i的值。

i也的確自增了乙個值,這樣就好理解為什麼i = i++中輸出第乙個i為什麼是0了,因為i在自增後又被等式右邊的值覆蓋了。也就是說這裡的i的值發生了三次變化,第一次是我們定義i = 0;第二次就是i自增後變成了1;第三次就是i又被0值覆蓋了。

Java中this的問題

首先this是指當前執行類例項物件。當你建立乙個物件並呼叫該物件的方法的時候其實下面這樣的 person p new person p.show string name 其實在編譯之後程式設計機器語言是p.show p name 第乙個引數是本類的物件的引用。而在這個show方法中怎麼來用這個引用呢...

JAVA中的覆蓋問題

1 子類方法的名稱 引數簽名和返回型別必須與父類方法的名稱 引數簽名和返回型別一致,修飾符可以相同也可以不同,但子類的訪問許可權不能低於父類的訪問許可權。2 父類的靜態方法不能被子類覆蓋為非靜態方法。3 子類可以定義與父類的靜態方法同名的靜態方法,以便在子類中隱藏父類的靜態方法。靜態方法只能隱藏,不...

Java中的死鎖問題

死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。簡而言之,乙個執行緒鎖住了資源a 還要使用資源b,另外乙個執行緒 鎖住了資源b 還想著得到資源a,當兩者互不相讓,就形成了死鎖。死鎖形成的條件 1 互斥條件 指程序對所分...