在哪里"这个"指的是

时间:2015-10-19 02:36:13

标签: java

Mate,我有一个非常简单的代码,我正在打印"这个"以及"对象"班上的。根据理论"这个"指的是当前"对象",但在我的代码中它看起来像"这"不是指当前的对象。需要一些指导

这是我的输出:

costructor this hash : Sandbox.Apple@1540e19d
newApple hash : Sandbox.Apple@1540e19d
this hash : Sandbox.Apple@1540e19d
costructor this hash : Sandbox.Apple@677327b6
apples hash : Sandbox.Apple@677327b6
this hash : Sandbox.Apple@1540e19d

我的问题是为什么输出的最后一行,即

this hash : Sandbox.Apple@1540e19d

指的是1540e19d而不是677327b6

public class ThisKeyword {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    Apple newApple = new Apple("Green Apple");
    System.out.println("newApple hash : " + newApple);

    newApple.calculateQuantity();
    newApple.testThis();
}

}

class Apple {
    String name;

public Apple(String name) {
    this.name = name;
    // TODO Auto-generated constructor stub
    System.out.println("costructor this hash : " + this);
}

public void calculateQuantity() {

    System.out.println("this hash : " + this);
}

public void testThis() {
    Apple apples = new Apple("Red Apple");
    System.out.println("apples hash : " + apples);
    System.out.println("this hash : " + this);
}

}

4 个答案:

答案 0 :(得分:1)

它正常运作。

你在这里创建两个Apple对象,newApple(在main方法中创建)和apples(在testThis()中创建)。

在Apple.testThis()中,行System.out.println("this hash : " + this);引用了您调用它的Apple对象,其变量为newApple,而不是apples

答案 1 :(得分:0)

因为当您调用方法newApple.testThis();时,其上下文是具有引用地址newApple的对象1540e19d。因此声明System.out.println("this hash : " + this);应打印地址1540e19d

同时,声明:

Apple apples = new Apple("Red Apple");
System.out.println("apples hash : " + apples);

提供了新对象apples的新地址,即677327b6

答案 2 :(得分:0)

this引用已定义类的当前实例,意味着它引用其方法被调用的对象。

最后一行输出是newApple.testThis()的乘积,当然它指的是带有1540e19d

的newApple

答案 3 :(得分:0)

您拨打newApple.testThis();的最后一个方法是System.out.println("this hash : " + this);,因为您在newApple上调用该方法,然后this引用newApple },而不是apples