亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java中a=a+1和a+=1的區(qū)別介紹

 更新時(shí)間:2021年12月01日 11:46:47   作者:user2025  
這篇文章主要介紹了java中a=a+1和a+=1的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

java a=a+1和a+=1的區(qū)別

在這里插入圖片描述

測(cè)試用例調(diào)用的方法

  public static void test(Object obj) {
        System.out.println(obj.getClass());
    }

(1) 精度小于int(或long)的數(shù)值運(yùn)算的時(shí)候都回被自動(dòng)轉(zhuǎn)換為int(或long)后進(jìn)行計(jì)算,運(yùn)算結(jié)果為

char i = 'a';
byte j = 2;
test(i + j);//class java.lang.Integer
byte i1 = 1;
short j1 = 2;
test(i1 + j1);//class java.lang.Integer

(2)char、byte、short、int、long等整形數(shù)和float(或double)進(jìn)行計(jì)算,會(huì)自動(dòng)先提升float(double),在進(jìn)行計(jì)算

int i2 = 1;
float j2 = 1.5f;
test(i2 + j2);//class java.lang.Float

(3)float與double進(jìn)行運(yùn)算時(shí),會(huì)float會(huì)先提升為double

float i3 = 1.2f;
double j3 = 1;
test(i3 + j3);//class java.lang.Double

(4)a=a+1和a+=1的區(qū)別

在這里插入圖片描述

Java趣事a=a++和a=++a

如果問(wèn) a++ 和 ++a 的區(qū)別,估計(jì)很多都能回答上來(lái)。a++ 是先取 a 的值再自增 。而 ++a 剛好相反,是先自增再取 a 的值。這里有點(diǎn)編程基礎(chǔ)都可以理解,不做過(guò)多解釋,但在 Java 里面事情就真的這么簡(jiǎn)單嗎?

int a = 1;
a = a++;
System.out.println(a);

憑借自己所學(xué),在不測(cè)試的情況下,你能給出答案嗎?

第一次看見(jiàn)這個(gè)問(wèn)題的時(shí)候,想當(dāng)然的認(rèn)為答案是:2。但殘酷的事實(shí)告訴我,答案是:1。當(dāng)時(shí)面對(duì)這個(gè)結(jié)果我是無(wú)法接受的,網(wǎng)上瘋狂搜索這個(gè)答案的解釋。限于當(dāng)時(shí)知識(shí)的水平,只記住了這個(gè)結(jié)論,至于推導(dǎo)這個(gè)結(jié)論那些指令,一個(gè)也不能理解。今天看書(shū)遇見(jiàn)數(shù)據(jù)操作,就又想起了這個(gè)問(wèn)題,就根據(jù)自己的知識(shí)水平,重新推導(dǎo)這個(gè)過(guò)程。

首先用 IDEA 打開(kāi)生成的 class 文件。

很直觀的告訴我們結(jié)果為 1 ,但這段代碼只解釋了 result,而沒(méi)有解釋 why ,繼續(xù)用 javap -c 這個(gè)命令,結(jié)果如圖。

這里寫(xiě)圖片描述

以第一次遇見(jiàn)這道題的水準(zhǔn),勉強(qiáng)能看懂第一步的 Java 代碼,第二步的指令就徹底看不懂了。而現(xiàn)在我可以從這些指令里面分析結(jié)果了(這里需要分析的就前五行命令,后面指令為打印輸出)。

  • iconst_1

將常量 1 壓入操作數(shù)棧。這個(gè)操作是 int 值為 1~5 的時(shí)候。如果是 -128~127 這個(gè)范圍是用的 bipush x (x 為實(shí)際數(shù)值)。 -2^15~2^15-1 這個(gè)范圍是使用的 sipush x 這個(gè)命令(同上)。 -2^31~2^31-1 這個(gè)范圍是使用的 ldc 這個(gè)命令。

  • istore_1

彈出操作數(shù)棧頂?shù)臄?shù)(此時(shí)為 1)并賦值給局部變量第一個(gè)元素即索引為 1 的 a。局部變量是采用的數(shù)組形式,索引為 0 的是 main() 的參數(shù) args 。

  • iload_1

把局部變量索引為 1 的變量(這里是 a)壓入操作數(shù)棧,此時(shí)棧頂元素為 1 。

  • incc 1,1(關(guān)鍵)

把局部變量索引為 1 的數(shù)加 1 ,此時(shí) a 的值為 2。注意:這個(gè)結(jié)果沒(méi)有壓入操作數(shù)棧。

  • istore_1

彈出棧頂?shù)脑兀ù藭r(shí)為 1)賦值給 a ,覆蓋 a 為 2 的結(jié)果。

整個(gè)過(guò)程大致就是這樣,來(lái)一幅圖解釋吧

這個(gè)問(wèn)題解決了,那么下面這段代碼就好理解了。

int a = 1;
a = ++a;
System.out.println(a);

直接上截圖吧

仔細(xì)對(duì)比一下,你會(huì)發(fā)現(xiàn),兩段代碼的指令一模一樣,但執(zhí)行順序有一點(diǎn)點(diǎn)區(qū)別, iinc 和 iload_1 這兩個(gè)命令的執(zhí)行順序變化了一下位置。你還記得這兩條指令的含義嗎?你還記得文章最開(kāi)始說(shuō)的區(qū)別嗎?

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實(shí)現(xiàn)大文件的切割與合并操作示例

    Java實(shí)現(xiàn)大文件的切割與合并操作示例

    這篇文章主要介紹了Java實(shí)現(xiàn)大文件的切割與合并操作,結(jié)合實(shí)例形式分析了java基于io及util操作大文件按指定個(gè)數(shù)分割與合并相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • javaCV視頻處理之提取人像視頻

    javaCV視頻處理之提取人像視頻

    這篇文章主要介紹了利用JavaCV實(shí)現(xiàn)提取視頻中的人像并保存為視頻,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)JavaCV有一定的幫助,需要的可以參考一下
    2021-12-12
  • IDEA-Maven環(huán)境配置及使用教程

    IDEA-Maven環(huán)境配置及使用教程

    這篇文章主要為大家詳細(xì)介紹了IDEA-Maven環(huán)境配置及使用教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Springboot實(shí)現(xiàn)阿里云通信短信服務(wù)有關(guān)短信驗(yàn)證碼的發(fā)送功能

    Springboot實(shí)現(xiàn)阿里云通信短信服務(wù)有關(guān)短信驗(yàn)證碼的發(fā)送功能

    短信驗(yàn)證碼是通過(guò)發(fā)送驗(yàn)證碼到手機(jī)的一種有效的驗(yàn)證碼系統(tǒng)。主要用于驗(yàn)證用戶手機(jī)的合法性及敏感操作的身份驗(yàn)證。下面通過(guò)本文大家分享Springboot實(shí)現(xiàn)阿里云通信短信服務(wù)有關(guān)短信驗(yàn)證碼的發(fā)送功能,一起看看吧
    2017-08-08
  • 關(guān)于Java中try finally return語(yǔ)句的執(zhí)行順序淺析

    關(guān)于Java中try finally return語(yǔ)句的執(zhí)行順序淺析

    這篇文章主要介紹了關(guān)于Java中try finally return語(yǔ)句的執(zhí)行順序淺析,需要的朋友可以參考下
    2017-08-08
  • IDEA+Maven搭建JavaWeb項(xiàng)目的方法步驟

    IDEA+Maven搭建JavaWeb項(xiàng)目的方法步驟

    本文主要介紹了IDEA+Maven搭建JavaWeb項(xiàng)目的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • SpringCloud服務(wù)注冊(cè)和發(fā)現(xiàn)組件Eureka

    SpringCloud服務(wù)注冊(cè)和發(fā)現(xiàn)組件Eureka

    對(duì)于微服務(wù)的治理而言,其核心就是服務(wù)的注冊(cè)和發(fā)現(xiàn)。在SpringCloud 中提供了多種服務(wù)注冊(cè)與發(fā)現(xiàn)組件,官方推薦使用Eureka。本篇文章,我們來(lái)講解springcloud的服務(wù)注冊(cè)和發(fā)現(xiàn)組件,感興趣的可以了解一下
    2021-05-05
  • Java深入了解數(shù)據(jù)結(jié)構(gòu)之二叉搜索樹(shù)增 插 刪 創(chuàng)詳解

    Java深入了解數(shù)據(jù)結(jié)構(gòu)之二叉搜索樹(shù)增 插 刪 創(chuàng)詳解

    二叉搜索樹(shù)是以一棵二叉樹(shù)來(lái)組織的。每個(gè)節(jié)點(diǎn)是一個(gè)對(duì)象,包含的屬性有l(wèi)eft,right,p和key,其中,left指向該節(jié)點(diǎn)的左孩子,right指向該節(jié)點(diǎn)的右孩子,p指向該節(jié)點(diǎn)的父節(jié)點(diǎn),key是它的值
    2022-01-01
  • 實(shí)例分析Java泛型

    實(shí)例分析Java泛型

    本篇文章通過(guò)代碼實(shí)例給大家講述了Java泛型的相關(guān)知識(shí)點(diǎn)以及相關(guān)的代碼分析,對(duì)此有興趣的朋友學(xué)習(xí)下。
    2018-02-02
  • SpringBoot使用Spring Security實(shí)現(xiàn)登錄注銷(xiāo)功能

    SpringBoot使用Spring Security實(shí)現(xiàn)登錄注銷(xiāo)功能

    這篇文章主要介紹了SpringBoot使用Spring Security實(shí)現(xiàn)登錄注銷(xiāo)功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-09-09

最新評(píng)論