求解这段代码打印结果

来源:7-8 Java 中的方法内部类

慕粉3814228

2017-12-26 14:47

//外部类
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不一样

写回答 关注

4回答

  • 阿斯顿撒xxls
    2017-12-26 15:17:33
    已采纳

      不太懂你想表达的意识。如果你是想问@1540e19d这里每次都输出不同,那么我猜测可能是因为你的方法是return一个值,但这个值你没有手动赋予它存储空间,它就系统自动存放,因此可能会不一样。

    可以尝试手动定义变量,给他赋值后用指针查看空间地址。然后比对一下应该就知道是不是上述猜想了。

  • qq_OK_21
    2017-12-26 15:41:26

    不好意思,我看错问题了。我的想法是,换了一个ide,应该又重新new一个MInner,内存就会给newScore重新分配一个地址。我试了一下,同一个ide输出的地址是相同的。

  • qq_OK_21
    2017-12-26 15:26:31

    你在调用内部类的方法时,输出的是newScore (是一个对象,最后得到的是它的存储地址),如果你想得到93这个结果,你需要声明一个int型的变量(我这里面是s),再把 newScore.getScore() 的结果赋给变量s(也就是     int s = newScore.getScore() ),最后输出s (这才是个整型变量)。

  • qq_OK_21
    2017-12-26 15:20:56
    //外部类
    	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();
    	    }
    	}


Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530646 学习 · 6091 问题

查看课程

相似问题