求解這段代碼打印結果
//外部類 public?class?HelloWorld?{ ????private?String?name?=?"愛慕課"; ????//?外部類中的show方法 ????public?void?show()?{ ????????//?定義方法內部類 ????????class?MInner?{ ????????????int?score?=?83; ????????????public?int?getScore()?{ ????????????????return?score?+?10; ????????????} ????????} ????????//?創建方法內部類的對象 ????????MInner?newScore?=?new?MInner(); ????????//?調用內部類的方法 ???????newScore.getScore(); ????????System.out.println("姓名:"?+?name?+?"\n加分后的成績:"?+?newScore); ????} ????//?測試方法內部類 ????public?static?void?main(String[]?args)?{ ????????//?創建外部類的對象 ????????HelloWorld?mo?=?new?HelloWorld(); ????????//?調用外部類的方法 ????????mo.show(); ????} }
結果是:
姓名:愛慕課
加分后的成績:HelloWorld$1MInner@1540e19d
我知道代碼寫錯了,奇怪的是后面輸出的@1540e19d,似乎再不同的IDE不一樣
2017-12-26
? 不太懂你想表達的意識。如果你是想問@1540e19d這里每次都輸出不同,那么我猜測可能是因為你的方法是return一個值,但這個值你沒有手動賦予它存儲空間,它就系統自動存放,因此可能會不一樣。
可以嘗試手動定義變量,給他賦值后用指針查看空間地址。然后比對一下應該就知道是不是上述猜想了。
2017-12-26
不好意思,我看錯問題了。我的想法是,換了一個ide,應該又重新new一個MInner,內存就會給newScore重新分配一個地址。我試了一下,同一個ide輸出的地址是相同的。
2017-12-26
你在調用內部類的方法時,輸出的是newScore (是一個對象,最后得到的是它的存儲地址),如果你想得到93這個結果,你需要聲明一個int型的變量(我這里面是s),再把?newScore.getScore() 的結果賦給變量s(也就是 ? ? int?s?=?newScore.getScore() ),最后輸出s (這才是個整型變量)。
2017-12-26