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);
}
}
答案 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
答案 3 :(得分:0)
您拨打newApple.testThis();
的最后一个方法是System.out.println("this hash : " + this);
,因为您在newApple
上调用该方法,然后this
引用newApple
},而不是apples
。