求解這段代碼打印結果
//外部類
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
//外部類 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(); ? ????????//?調用內部類的方法 ???????int?s?=?newScore.getScore(); ???????? ? ????????System.out.println("姓名:"?+?name?+?"\n加分后的成績:"?+?s); ????} ? ????//?測試方法內部類 ????public?static?void?main(String[]?args)?{ ? ????????//?創建外部類的對象 ????????HelloWorld?mo?=?new?HelloWorld(); ? ????????//?調用外部類的方法 ????????mo.show(); ????} }