如果寫5++,編譯器默認(rèn)將5看成變量,未經(jīng)聲明而且違反了變量命名規(guī)則中標(biāo)識符不能以數(shù)字開頭,會報(bào)出invalid argument to opreate--無效參數(shù)操作。如果編譯器默認(rèn)了5為數(shù)值,那么5++意義何在呢?要知道5這個(gè)數(shù)值在內(nèi)存中不占空間,只在運(yùn)算時(shí)存儲在cpu的數(shù)據(jù)寄存器中。變量運(yùn)算操作的結(jié)果可以返回存儲到變量所屬內(nèi)存中,數(shù)值運(yùn)算操作的結(jié)果沒有地方可以存放,這樣5++的結(jié)果會被丟棄。為了防止這樣的無效運(yùn)算,編譯器會在編譯期時(shí)就將一些數(shù)值運(yùn)算計(jì)算出結(jié)果存到二進(jìn)制的class文件中,如:System.out.println(9+1),表面上,運(yùn)行后才得出10,其實(shí)在編譯期得到的二進(jìn)制代碼就是:System.out.println(10)。這里可以看出,自增自減是運(yùn)行期運(yùn)算的,而不是編譯期。c語言中有自增自減運(yùn)算,你可以結(jié)合理解下。
2016-12-30
如果寫5++,編譯器默認(rèn)將5看成變量,未經(jīng)聲明而且違反了變量命名規(guī)則中標(biāo)識符不能以數(shù)字開頭,會報(bào)出invalid argument to opreate--無效參數(shù)操作。如果編譯器默認(rèn)了5為數(shù)值,那么5++意義何在呢?要知道5這個(gè)數(shù)值在內(nèi)存中不占空間,只在運(yùn)算時(shí)存儲在cpu的數(shù)據(jù)寄存器中。變量運(yùn)算操作的結(jié)果可以返回存儲到變量所屬內(nèi)存中,數(shù)值運(yùn)算操作的結(jié)果沒有地方可以存放,這樣5++的結(jié)果會被丟棄。為了防止這樣的無效運(yùn)算,編譯器會在編譯期時(shí)就將一些數(shù)值運(yùn)算計(jì)算出結(jié)果存到二進(jìn)制的class文件中,如:System.out.println(9+1),表面上,運(yùn)行后才得出10,其實(shí)在編譯期得到的二進(jìn)制代碼就是:System.out.println(10)。這里可以看出,自增自減是運(yùn)行期運(yùn)算的,而不是編譯期。c語言中有自增自減運(yùn)算,你可以結(jié)合理解下。
以上純屬個(gè)人理解,如有疑問,可以互相探討下,歡迎提問!共同進(jìn)步!