日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[短文速读] a=a+b和a+=b的区别

發布時間:2024/4/13 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [短文速读] a=a+b和a+=b的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

短文速讀,這將是一個系列文章。自己寫了很多文章,也看了很多文章。發現很多都是收藏不看系列。當然有時間的時候,的確會把收藏的文章找出來好好的學習一番。但是大多數文章仿佛石沉大海,失去了應有的價值。

所以萌生了這個系列的想法,系列文章的特點:以一些日常開發中不起眼的基礎知識點為內核,圍繞此包裹通俗易懂的文字。盡量用少思考的模式去講述一個知識。讓我們能夠真正在碎片化的時間里學到東西!

出場角色

小A:剛踏入Java編程之路...

MDove:一個快吃不上飯的Android開發...

正題

小A:MDove,最近我有一個不成熟的小疑問,不知道當講不當講。

MDove:不成熟那就別問了...

小A:額錯了,額真滴錯了。額從一開始就不應該學Java...

MDove:問、問、問...

小A:a=a+b和a+=b。這倆者有什么區別呀?沒看出來有什么區別啊!

MDove:你所說的沒區別,是這樣吧?

int a = 1; int b = 2; a = a + b; a += b;

MDove:那你有沒有換過別的寫法呢?比如把b的類型變一下:

float b = 2F;

MDove:怎么樣,看出來效果了吧。沒看出來??OK,那我就貼上效果:

編譯不能通過

MDove:這樣就能看明白了吧?b提升了類型之后。會發現a = a + b是沒辦法編譯通過的,需要強制類型轉換才可以。但是我們的a + = b卻可以,這是為什么呢?其實很簡單。讓我們反編譯一下這個class文件,就可以很清晰的給出答案:

public void fun() { int a = 1;float b = 2F;a += b; }// 反編譯class的內容 public void fun() {byte var1 = 1;float var2 = 2.0F; int var10000 = (int)((float)var1 + var2); }

MDove:所以它們二者的區別就很清楚了吧?在這種a比b類型范圍要小的情況下。a = a + b;需要強制類型轉換,也就是我們常寫的:a = (int) (a+b);而我們的a += b;被我們的編譯器在編譯期做了一些小手腳。也就是編譯器幫我們進行了強制類型轉化。

小A:原來是這樣,那強制類型轉換會帶來什么問題呢?

MDove:解答這個問題,讓我們先來看一張圖:

image

MDove:強制類型轉化,一般會帶來精度丟失的問題。這里float的范圍太大,我們就用byte和short來演示,強制類型帶來的問題:

public void fun() {byte a = 1;short b = 127;a=(byte) (a+b);System.out.println(a); }

MDove:System打出的內容,應該知道是什么吧?沒錯是-128。強制類型帶來的問題一目了然了吧。

小A:怎么會是-128呢?

MDove:OK,接下來,我來解釋一下,為什么會是-128這么一個奇怪的數字。首先,我們都知道基本類型在堆中所占的字節如下表。

小A:不對呀?我記得基本類型是存放在棧中的呀?

MDove:這種說法并不錯,但不全面。存放在堆中還是在棧中,是取決于這個變量聲明的位置。如果是局部變量,則會存放在棧幀中。但是如果是成員變量(全局變量),那么就會存放在堆中。此外存放在棧中,基本類型所占的字節是固定:如果是32位計算機那么就是4字節;64位便是8字節。

類型所占字節
byte1字節
short2字節
int4字節
long8字節
char2字節
float4字節
double8字節

MDove:解釋完所占字節的問題,咱們繼續。由上邊可知byte占1字節,那么也就是8位,如果每一位都為1(11111111),那么理論上就是它所能表示的最大內容。

小A:那應該是255呀!

MDove:實際不然,因為正負的原因,計算機中使用補碼的形式表示二進制,高1位表示符號位(0為正,1為負)。因此對于8位來說,最大只能是01111111,也就是127。(0表示它為正)

MDove:而我們剛才的那個計算byte a = 1; short b = 127; a=(byte) (a+b);不考慮類型轉換,那么a+b妥妥的等于128。并且對于所占2字節的short來說那就是00000000 10000000。但是我們強制類型轉化成了byte,這時做了一件事情,那就是高1字節的內容全部砍掉,也就是只剩下了10000000。

MDove:按我們剛才所說,高1位的內容表示正負。1為負。

小A!!!如果1為負,那System.out應該是0才對啊。

MDove:一看你二進制就沒有好好學。對于含有補碼形式的10000000,我們要用補碼的方式去計算。計算套路如下:高1位為1,那么這是數就是負數。想要知道是負幾,我們需要將10000000按位取反,也就是01111111。還沒完,此時還要再加1,也就是10000000?,F在得到的這個數是幾,那么就是負幾,10000000是十進制的128,因此補碼形式的10000000也就是:-128。

MDove:這樣解釋是不是就知道強制類型轉換帶來的問題,以及為什么強制類型轉化后的byte變成了-128了吧。

小A:好難學...我想回家種地...

小A媽:崽,別學編程啦,趕緊回家收玉米了。

劇終

這里是一幫應屆生共同維護的公眾號,內容是我們在從應屆生過渡到開發這一路所踩過的坑,以及我們一步步學習的記錄,如果感興趣的朋友可以關注一下,一同加油,一同努力

個人公眾號:IT面試填坑小分隊

總結

以上是生活随笔為你收集整理的[短文速读] a=a+b和a+=b的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: xxxx国产| 国产丝袜视频 | 在线看黄网址 | 日本一区二区三区在线免费观看 | 美日韩在线观看 | 钰慧的mv视频在线观看 | 亚洲国产精品免费在线观看 | 国产成人激情视频 | 男人天堂电影 | 色婷婷一区二区三区 | 国产精品视频a | 国产欧美一区二区三区视频 | 日本高清不卡在线 | 国产区一二三 | 亚洲一区h | 日韩黄色片免费看 | 亚洲成人高清在线 | 久久国产精品波多野结衣av | 久久综合狠狠综合久久综合88 | 第四色在线视频 | 四虎精品在线播放 | 三级欧美视频 | 欧美在线不卡视频 | 成人两性视频 | 亚州综合网 | 日韩精品1区2区3区 欧美一本 | 国产永久精品大片wwwapp | av免费观看网 | 狠狠躁夜夜躁人人爽视频 | 国产成人无码一二三区视频 | 麻豆蜜桃在线观看 | 久久艹免费视频 | 国产成人视屏 | 九色丨蝌蚪丨成人 | 色导航在线 | 久久久久无码国产精品不卡 | 日韩中文av在线 | 狠狠v欧美v日韩v亚洲ⅴ | 欧美激情视频在线观看 | 国产精品剧情一区 | 天天操天天干天天舔 | 91一区二区在线观看 | 免费观看一级视频 | 久久精品在线播放 | 国产麻豆一区二区 | 亚洲天堂导航 | 影音先锋啪啪 | 浪荡奴双性跪着伺候 | 国产美女主播在线观看 | 国产一级免费av | 麻豆av在线播放 | 嫩草影院懂你的 | 亚洲大胆人体 | 国产精品自拍av | 日韩久久一区二区三区 | 久久久一级片 | 911国产视频 | 久久蜜桃av | 久久综合伊人 | 偷拍亚洲欧美 | 韩国av在线播放 | 日本熟妇一区二区三区 | 欧美大片a | 欧美综合成人 | 少妇精品无码一区二区三区 | 欧美卡一卡二 | 正在播放国产一区 | 国产精品日韩专区 | 成人久久网站 | 日本狠狠爱 | 激情青青草 | 福利视频一区 | 国产一级视频在线观看 | 国产毛片在线 | 黄色国产在线视频 | aa一级片| 一区二区三区四区高清视频 | 天天舔日日操 | 四虎精品一区二区 | 日韩三级视频 | 成人黄色一级视频 | 日本不卡一二 | 我把护士日出水了视频90分钟 | 久色婷婷 | 18pao国产成视频永久免费 | 成年人看的免费视频 | 国产精品日本一区二区在线播放 | 久99热 | 成片免费观看视频大全 | 操操操操操操操操操 | 精品欧美黑人一区二区三区 | 蜜桃av噜噜一区二区三区小说 | 亚洲色成人www永久在线观看 | 国产黄色影视 | 六十路息与子猛烈交尾 | 欧美日韩高清一区二区 | 一区二区国产精品视频 | 亚洲最黄视频 | 亚洲美女视频在线 |