JavaSE面試題01:自增變數

来源:https://www.cnblogs.com/runwsh/archive/2023/11/19/JavaInterview01.html
-Advertisement-
Play Games

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); ...


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);
    }
  • 現在,讓我們逐行解釋這段代碼的執行

1. int i = 1;:創建整數變數 i 並將其初始化為1。(i=1;)

2. i = i++;:這是一個有爭議的表達式。首先,它將 i 的當前值1壓棧到一個操作數棧中。然後,它將 i 自增1,這就使得變數i=2了,但右邊的操作數棧不是沒有後續的邏輯運算了,就會將之前壓到操作數棧的1賦值給i。所以,i 的值又變為了1。(i=1;)

  • 如果是`i=++i`呢,就是入棧的時候就會將自增後的變數i壓入棧中,變數i2,使得出棧的時候也是為2了。
    

3. int j = i++;:將 i 的當前值1賦給 j,然後將 i 自增1。所以,j 的值是1,而 i 的值變為2。(i=2;j=1)

4. int k = i + ++i * i++;:這是一個複雜的表達式。首先看右邊的表達式,操作數棧會先將i變數入棧;也就是2先入棧,這個時候往右走++i,是將i自增後的數壓入棧中,也就是3,然後再看下一個操作數是i++;記住一點的就是,++i壓入棧中是將i自增後壓入棧中;i++是將i變數壓入棧中; ,記住這個規則就是,繼續壓入棧中的數字是3 。所以現在的操作數棧中的數據從棧低到棧頂依次為:2->3->3;按照運算符操作順序先乘後加,2+3*3=11。

列印結果:

i=4
j=1
k=11

小結

    1. 賦值=,最後計算
    1. =右邊的從左到右載入值依次壓入操作數棧
    1. 實際先算哪個,看運算符優先順序
    1. 自增、自減操作都是直接修改變數的值,不經過操作數棧
    1. 最後的賦值之前,臨時結果也是存儲在操作數棧中

建議:《JVM虛擬機規範》關於指令的部分


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言: 我們在平常本地開發時,可能經常需要與後端進行聯調,或者調用一些api,但是由於瀏覽器跨域的限制、開發與生產環境的差異、http與https等問題經常讓聯調的過程不夠順暢。所以本文介紹一下webpack的devServer中的proxy配置項。接下來讓我們先看一下這個配置項的基本使用: 基本使 ...
  • 前言 這是第二次博客作業,總結了近三次PTA大作業的完成情況,這三次的大作業難度逐漸增大,完全理不清邏輯,真的越想越混亂,代碼寫的也是很亂,沒有一個整體的框架結構,讀起來很困難,沒有學到java程式編寫的真諦,總之對於我,一個邏輯很差很差的人來說,越來越複雜的題目,寫起來真的痛苦,到後面的題目,基本 ...
  • 按規則解析並替換字元串中的變數及函數 需求 1、按照一定規則解析字元串中的函數、變數表達式,並替換這些表達式。這些函數表達式可能包含其它函數表達式,即支持函數嵌套 2、函數表達式格式:${ __函數名稱() }、${__函數名稱( 函數參數 )} 3、變數表達式格式:${ varName } 註意: ...
  • python 版本:3.6 win32 版本(因為一些特殊原因必須使用3.6) pymssql 版本:2.2.0 連接資料庫: import pymssql** def InitMssql(self): try: host = self.IniConfig.get('default','dbhost ...
  • 學習完基礎的圖像演算法,開始接觸OpenCV學習: 灰度圖中,一個像素點上的灰度級需要一個位元組(byte,2^8,8 bit)進行存儲,此時的灰度圖是二維的。而當我們需要轉換為彩色圖時,即三維,便會產生顏色通道(Channel),這個時候,一個像素點上的灰度級便會需要三個位元組來進行存儲。 可以藉助笛卡 ...
  • 本文只發佈於利用OpenCV實現尺度不變性與角度不變性的特征找圖演算法和知乎 一般來說,利用OpenCV實現找圖功能,用的比較多的是模板匹配(matchTemplate)。筆者比較喜歡裡面的NCC演算法。但是模板有個很明顯的短板,面對尺度改變,角度改變的目標就無能為力了。因此本文旨在做到模板匹配做不到的 ...
  • 目錄: Redis是什麼? Redis優缺點? Redis為什麼這麼快? 講講Redis的線程模型? Redis應用場景有哪些? Memcached和Redis的區別? 為什麼要用 Redis 而不用 map/guava 做緩存? Redis 數據類型有哪些? SortedSet和List異同點? ...
  • 14.1、概述 在實際工作中,一般使用配置類和註解代替web.xml和SpringMVC配置文件的功能; 在 Servlet3.0 環境中,容器會在類路徑中查找實現了 javax.servlet.ServletContainerInitializer 介面的類, 如果找到了的話,就會用它來配置 Se ...
一周排行
    -Advertisement-
    Play Games
  • MQTTnet 是一個高性能的MQTT類庫,支持.NET Core和.NET Framework。 MQTTnet 原理: MQTTnet 是一個用於.NET的高性能MQTT類庫,實現了MQTT協議的各個層級,包括連接、會話、發佈/訂閱、QoS(服務質量)等。其原理涉及以下關鍵概念: MqttCli ...
  • 在WPF中,源屬性(Source Property)指的是提供數據的屬性,通常是數據模型或者其他控制項的屬性,而目標屬性(Target Property)則是數據綁定的目標,通常是綁定到控制項的屬性,例如TextBlock的Text屬性。數據綁定將源屬性的值自動更新到目標屬性中。 主要包含以下幾個事件: ...
  • async/await 是 C# 中非同步編程的關鍵特性,它使得非同步代碼編寫更為簡單和直觀。下麵深入詳細描述了 async/await 的使用場景、優點以及一些高級使用方法,並提供了相應的實例源代碼。 使用場景: I/O 操作: 非同步編程特別適用於涉及 I/O 操作(如文件讀寫、網路請求等)的場景。在 ...
  • 使用過office的visio軟體畫圖的小伙伴都知道,畫圖軟體分為兩部分,左側圖形庫,存放各種圖標,右側是一個畫布,將左側圖形庫的圖標控制項拖拽到右側畫布,就會生成一個新的控制項,並且可以自由拖動。那如何在WPF程式中,實現類似的功能呢?今天就以一個簡單的小例子,簡述如何在WPF中實現控制項的拖拽和拖動,... ...
  • 1、Blazor Hybrid簡介 Blazor Hybrid 使開發人員能夠將桌面和移動本機客戶端框架與 .NET 和 Blazor 結合使用。在 Blazor Hybrid 應用中,Razor 組件在設備上是本機運行的。 這些組件通過本地互操作通道呈現到嵌入式 Web 視圖控制項。 組件不在瀏覽器 ...
  • 除了內置的數據集,scikit-learn還提供了隨機樣本的生成器。通過這些生成器函數,可以生成具有特定特性和分佈的隨機數據集,以幫助進行機器學習演算法的研究、測試和比較。 目前,scikit-learn庫(v1.3.0版)中有20個不同的生成樣本的函數。本篇重點介紹其中幾個具有代表性的函數。 1. ...
  • 從0到1,手把手帶你開發截圖工具ScreenCap------002實現通過文件對話框,選擇合適的文件夾,自定義預設的圖片保存位置,簡單易學 ...
  • 每次談到容器的時候,除了Docker之外,都會說起 Kubernetes,那麼什麼是 Kubernetes呢?今天就來一起學快速入門一下 Kubernetes 吧!希望本文對您有所幫助。 Kubernetes,一種用於管理和自動化雲中容器化工作負載的工具。 想象一下你有一個管弦樂隊,將每個音樂家視為 ...
  • 目錄 基本說明 安裝 Nginx 部署 VUE 前端 部署 Django 後端 Django admin 靜態文件(CSS,JS等)丟失的問題 總結 1. 基本說明 本文介紹了在 windows 伺服器下,通過 Nginx 部署 VUE + Django 前後端分離項目。本項目前端運行在 80 埠 ...
  • 從0到1,手把手帶你開發截圖工具ScreenCap------003實現最小化程式到托盤運行,- 為了方便截圖乾凈,實現最小化程式到托盤運行,簡潔,勿擾,實現最小化程式到托盤運行, 實現托盤菜單功能,實現回顯主窗體, 實現托盤開始截屏, 實現氣泡信息提示,實現托盤程式提示,實現托盤退出程式, 封裝完... ...