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

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

Java中反射計算2 + 2 = 5

Java中反射計算2 + 2 = 5

代碼如下:package basic;import java.lang.reflect.Field;public class TestField {    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {         @SuppressWarnings("rawtypes")         Class cache = Integer.class.getDeclaredClasses()[0];         Field myCache = cache.getDeclaredField("cache");         myCache.setAccessible(true);         Integer[] newCache = (Integer[]) myCache.get(cache);        newCache[132] = newCache[133];         int a = 2;         int b = a + a;         System.out.printf("%d + %d = %d", a, a, b);     } }運行結(jié)果如下:2 + 2 = 5為什么會有這樣的輸出結(jié)果呢?另外附上內(nèi)部類IntgerCache的源碼如下:
查看完整描述

1 回答

?
紅顏莎娜

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

JavaInteger對-127到128的整形數(shù)據(jù)是有緩存的,你這里通過反射緩存中的第133號數(shù)據(jù)(既整數(shù)5)賦值給了第132號數(shù)據(jù)(既整數(shù)4),所以4就會變成5來表示。在使用int數(shù)據(jù)計算時結(jié)果是正常的,但是在打印時由于做了裝箱,int數(shù)據(jù)變成了Integer,這時會采用緩存,所以4就會打印出5來。

查看完整回答
反對 回復 2018-09-17
  • 1 回答
  • 0 關注
  • 731 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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