1. 程式人生 > >java中i++ 與 i=i++的區別

java中i++ 與 i=i++的區別

記得大學剛開始學C語言時,老師就說:自增有兩種形式,分別是i++與++i,i++表示的是先賦值後加1,++i是先加1後賦值。我們來看下下面的例子:

public class Client {
    public static void main(String[] args) {
        int count =0;
        for(int i=0; i<9; i++) {
            count = count++;
        }
        System.out.println(count);
    }
}

這個程式輸出的count等於幾?是count自加10次嗎?答案等於10?可以非常肯定地告訴你,答案錯誤!執行結果是count等於0.為什麼呢?

count++是一個表示式,是有返回值的,它的返回值就是count自增前的值,java對於自增是這樣處理的:先把count的值(注意是值,不是引用)拷貝到一個臨時變數區,然後對count變數加1,最後返回臨時變數區的值。程式第一次迴圈時的詳細處理步驟如下:
步驟1:JVM把count的值拷貝到臨時變數區
步驟2:count值加1,這時候count的值是1
步驟3:返回臨時變數區的值,0
步驟4:返回值賦值給count,此時count值被重置成0.

解決方法很簡單,只需把“count = count++”改成count++.

相關推薦

讓你徹底明白JAVA棧的區別

java程序 運行 一點 動態 自動變 key 空間 類型 lin 原文地址:http://www.2cto.com/kf/201302/190704.html 簡單的說: Java把內存劃分成兩種:一種是棧內存,一種是堆內存。 在函數中定義的一些基本類型的變量和對象的引用

Javathissuper的區別以及用法

輸出結果 類構造 pan tex 成員變量 靜態 public 裏的 一個 super()用法 super()函數在子類構造函數中調用父類的構造函數時使用,必須要在構造函數的第一行。 1 class Animal { 2 public Anima

Java == 號equals()方法區別詳解

== 號與equals()方法區別這個問題在面試中經常被問到,如果你瞭解的不透徹,很容易被問蒙。下面我們來一起看看吧。 1.基本資料型別,也稱原始資料型別。byte,short,char,int,long,float,double,boolean 他們之間的比較,應用雙等號(==)

javaintInteger的區別

java中int與Integer的區別 本文引自: https://www.cnblogs.com/guodongdidi/p/6953217.html. 兩者之間的區別 1、Integer是int的包裝類,int則是java的一種基本資料型別 2、Integer變數必須例項化後

Java陣列變數的區別

LinkedList list; LinkedList list2; list=list2; list2.add("GGGg"); System.out.println(list); 上面是list2,list 為變數,因為list2 沒有初始化,必須得先初始化,後賦值&

java重寫過載的區別

ava—重寫與過載的區別 這幾周開始看Java的知識,發現有一個有趣的現象就是,前兩天剛看過的知識點,過一天又忘掉了。而且很多東西堆在腦子裡像漿糊一樣。所以邊學習邊總結是很重要的,今天想寫一篇關於重寫和過載的部落格,為什麼?因為面試會問啊,這是基礎中比較重要的地方,但我百度了幾篇部落格之後發現寫

JavaRMIRPC的區別

隨著Java技術學習的不斷深入,越來越覺得保持初心是多麼重要,無論我們學到哪個程度,在學習的時候始終保持初學者的心態,才能在自己的技術之上實現突破! 今天有點像雞湯,迴歸正題,繼續更新我的學習筆記:Java技術中的 RMI與RPC的區別。 一:RPC遠端過程呼叫 RPC(Remote Procedure

JavahasNext()next()的區別,hasNextInt()nextInt()的區別,hasNextDouble()nextDouble()的區別

轉載自:https://blog.csdn.net/weixin_37770552/article/details/77431961 還有補充:https://zhidao.baidu.com/question/198579166802848525.html java.util.Scanne

Javacontinuebreak的區別

continue與break大家都知道是跳出語句,但其實他們存在一定的區別 continue :官方解釋為結束本次迴圈;              

JAVAStringStringBuffer的區別

在java中有3個類來負責字元的操作。 1.Character 是進行單個字元操作的, 2.String 對一串字元進行操作。不可變類。 3.StringBuffer 也是對一串字元進行操作,但是可變類。 String: 是物件不是原始型別. 為不可變物件,一旦被建立,就不能

JAVA Breakreturn的區別

break是用來跳出迴圈的,例如for,while,do-while都可以跳出,但不跳出函式 return是使整個函式返回的,後面的不管是迴圈裡面還是迴圈外面的都不執行 再說一下,break語句通常用在迴圈語句和開關語句中,當break語句用於do-while、for、w

javanext()nextLine()的區別

  next():一定要讀取到有效字元後才可以結束輸入,對輸入有效字元之前遇到的空格鍵、Tab鍵或Enter鍵等結束符,next()方法會自動將其去掉,只有在輸入有效字元之後,next()方法才將其後輸入的空格鍵、Tab鍵或Enter鍵等視為分隔符或結束符,所以next()方

java的“=”“equals”的區別

生命之燈因熱情而點燃,生命之舟因拼搏而前行。 java中的資料型別 兩大資料型別 首先要對java的資料型別有了解。 基本資料型別 整型 int |short | long | byte 浮點型 |float |double 字元型|char 布林型|boo

javaextendsimplements的區別

1. 在類的宣告中,通過關鍵字extends來建立一個類的子類。一個類通過關鍵字implements宣告自己使用一個或者多個介面。 extends 是繼承某個類, 繼承之後可以使用父類的方法, 也可以重寫父類的方法; implements 是實現多個介面, 介面的方法一般為空的, 必須重寫才能使用 2.e

JavaIONIO的區別和使用場景

這幾天主要學習了NIO,因為之前對IO使用的也比較多,所以有一個簡單的對比,並且把學習的成果記錄下來。   java.NIO包裡包括三個基本的元件 l buffer:因為NIO是基於緩衝的,所以buffer是最底層的必要類,這也是IO和NIO的根本不同,雖然strea

JAVAStringStringBuffer的區別 .

String和StringBuffer的區別,網上資料可以說是數不勝數,但是看到這篇文章,感覺裡面做的小例子很有代表性,所以轉一下,並自己做了一點總結。 在java中有3個類來負責字元的操作。 1.Character 是進行單個字元操作的, 2.String 對一串字元進行操作。不可變類。 3

java collection collections 的區別

今天面試時,筆試題遇到這個問題,從網上查了些資料,總結如下: 1、java.util.Collection 是一個集合介面。它提供了對集合物件進行基本操作的通用介面方法。Collection介面在Java 類庫中有很多具體的實現。 Collection介面的

[轉載]Java過載重寫的區別

首先我們來講講:過載(Overloading)     (1) 方法過載是讓類以統一的方式處理不同型別資料的一種手段。多個同名函式同時存在,具有不同的引數個數/型別。 過載Overloading是一個類中多型性的一種表現。     (2) Java的方法過載,就是

JavaErrorException的區別

Error類和Exception類都繼承自Throwable類。 Error的繼承關係: Exception的繼承關係: 二者的不同之處: Exception: 1.可以是可被控制(checked) 或不可控制的(unchecked)。 2.表示一個由

javaoverloadoverride的區別

1、綜述   重寫(Override)也稱覆蓋,它是父類與子類之間多型性的一種表現,而過載(Overload)是一個類中多型性的一種表現。 override從字面就可以知道,它是覆蓋了一個方法並且對其重寫,以求達到不同的作用。overload它是指我們可以定義