目錄
創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司一直秉承“誠(chéng)信做人,踏實(shí)做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個(gè)客戶多一個(gè)朋友!專注中小微企業(yè)官網(wǎng)定制,成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì),塑造企業(yè)網(wǎng)絡(luò)形象打造互聯(lián)網(wǎng)企業(yè)效應(yīng)。一、從一道很有意思的題目出發(fā)
二、思考總結(jié)
題目:
?假設(shè)有“int x=1;”,下列代碼中,(C)將導(dǎo)致“可能損失精度,找到int需要char”這樣的編譯錯(cuò)誤。
A. short t=12+'a';
B. char c='a'+1;
C.char m='a'+x;
D.byte n='a'+1;
-----------------------------------------------------------------------------------------------
答案選C。
這是因?yàn)?,?dāng)賦值號(hào)右邊的表達(dá)式中有變量時(shí),編譯只檢查變量的類型,不檢查變量中的值。即使在本題中,x已經(jīng)被賦值,但它仍然是一個(gè)變量,編譯器在運(yùn)算'a'+x的時(shí)候,并不檢查x的值,只檢查x是int類型,并認(rèn)為'a'+x的結(jié)果是int類型(這里說(shuō)明一下,有多個(gè)基本數(shù)據(jù)運(yùn)算的時(shí)候,如果表達(dá)式中的最高精度低于int型整數(shù),則按int精度進(jìn)行計(jì)算。所以即使x是byte類型,x+'a'的結(jié)果也依然是int類型),所以會(huì)有“可能損失精度,找到int需要char”這樣的編譯錯(cuò)誤。
----------------------------------------------------------------------------------------------------------------------------
上述文字中提到“編譯器在運(yùn)算'a'+x的時(shí)候,并不檢查x的值,只檢查x的類型”,這是因?yàn)槌A恐翟诰幾g期確定,而變量值要在運(yùn)行期確定。
ABD中,值其實(shí)在編譯期間就可以計(jì)算出來(lái),并且計(jì)算結(jié)果是不會(huì)超過(guò)范圍的。
唯獨(dú)C卻不會(huì)在編譯期間求值,需要在運(yùn)行期間計(jì)算。
這樣的話,編譯器無(wú)法確知結(jié)果是否超出范圍,所以要給出一個(gè)錯(cuò)誤。
你可能會(huì)問(wèn),x不是1嗎,但是x是變量,編譯器生成讓x=1,再讓m='a' + x這樣的指令,卻不會(huì)在編譯期間越俎代庖的把值計(jì)算出來(lái),計(jì)算是留到運(yùn)行期間的。
---------------------------------------------------------------------------------------------
二、思考總結(jié)那么,為什么變量值要等到運(yùn)行期確定,而常量值就可以直接在編譯期確定呢?
首先,我們要知道:
編譯期:檢查是否有語(yǔ)法錯(cuò)誤,如果沒(méi)有就將其翻譯成字節(jié)碼文件。即.class文件。
運(yùn)行期:java虛擬機(jī)分配內(nèi)存,解釋執(zhí)行字節(jié)碼文件。
對(duì)于?
final?int?a=10;??
final?int?b=20;??
int?c=30;??
int?d=40;??
int?num1=a+b;??
int?num2=c*d;?
java編譯時(shí)會(huì)做一些優(yōu)化操作。第5行,因?yàn)槭莾蓚€(gè)常量做運(yùn)算,那么他們的結(jié)果就是確定的,即num1的值是確定的。所以在編譯時(shí),編譯器就會(huì)直接算出num1的值。第6行則不會(huì),java在運(yùn)行時(shí)期才為變量分配內(nèi)存空間。
所以,變量值要等到運(yùn)行期確定是因?yàn)閖ava在運(yùn)行期間才會(huì)為變量分配內(nèi)存。
(若有不對(duì)或者需要優(yōu)化的地方,請(qǐng)大家多多指教)
整理日期:2022--3-25
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧