第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

下面這圖里,最后一段話,看不懂啊,大神打點代碼演示看看啊

下面這圖里,最后一段話,看不懂啊,大神打點代碼演示看看啊

fenkapian 2017-04-09 20:10:04
java的八種基本類型(Byte? Short、Integer、Long、Character、Boolean、Float、Double),除Float及Double意外,其它六種都實現(xiàn)了常量池, 但是他們只在大于等于-128且小于等于127時才能使用常量池,如果不在此范圍內(nèi),則會new一個出來,保存在堆內(nèi)存中。
查看完整描述

1 回答

已采納
?
frece

TA貢獻36條經(jīng)驗 獲得超15個贊

常量池你可以理解成 一塊內(nèi)存空間,

說明一個知識點, == 這個運算符號,如果a == b 是true的話,說明 a和b指向的同一個對象,兩個對象不相等的話他們運行 == 運行結(jié)果一定是false(注意是對象不相等不是值不相等)

下面 上代碼:

public?class?Test?{
	public?static?void?main(String[]?args)?{
		Integer?i1?=?1;
		Integer?i2?=?1;	//i2在-128~127?直間,等價于?i2?=?i1
		System.out.println(i1?==?i2);
		/**
		?*?輸出結(jié)果?true
		?*/
		Integer?i3?=?128;?//?i3?不在-128~127?直間,等價于?i3?=?new?Integer(128);
		Integer?i4?=?128;//??i4?不在-128~127?直間,等價于?i4?=?new?Integer(128);
		System.out.println(i3?==?i4);
		/**
		?*?輸出結(jié)果?false
		?*/
		
	}		
}

就拿Integer舉例說吧,上邊代碼?Integer i1 = 1; 當(dāng)i1創(chuàng)建出來的時候編譯器發(fā)現(xiàn)他在-128~127這個范圍里,所以會把它暫存在一塊固定的內(nèi)存中,當(dāng)你再定義 Integer i2 = 1的時候,編譯器會去常量池中找看看你之前有沒有定義過值為1的Integer對象,如果找到了就直接拿來用,沒有才會創(chuàng)建新的,所以 這里 i1 和i2指向了同一個對象,故System.out.println(i1 == i2); 為true, 如果你在后邊再創(chuàng)建i5, i6,i7,i8。。。創(chuàng)建多少個,它都指向這一個對象,他們進行==運算結(jié)果都是true

當(dāng)你定義i3 = 128時,編譯器發(fā)現(xiàn)他不在-128~127這個范圍內(nèi),因此就會直接new一個新的Integer對象出來,同理定義i4 = 128時也一樣,所以 i3 == i4運算結(jié)果為false

這樣做的目的是節(jié)省空間提高程序運行效率

題外話:如果想比較值的話 用?i3.intValue() == i4.intValue() 這樣結(jié)果是true

查看完整回答
反對 回復(fù) 2017-04-19
  • fenkapian
    fenkapian
    非常感謝
  • fenkapian
    fenkapian
    等等,為什么非得在-128-127呢,這不是byte的范圍嗎,int的范圍不是21億多嗎
  • frece
    frece
    并不是他范圍多大就設(shè)置多大,常量池這個東西創(chuàng)建出來是為了節(jié)省空間的,即便是-128~127的這個范圍,他也能存256個數(shù)字,你像其他的Short,Long也要分配一部分內(nèi)存,還有String也有常量池,如果范圍太大的話,那不就失去了“節(jié)省內(nèi)存”的意義了嗎?
  • 1 回答
  • 0 關(guān)注
  • 1271 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號