Java 它的真正含义是什么';这';在爪哇?
如果我使用system out在点1和点2打印Java 它的真正含义是什么';这';在爪哇?,java,Java,如果我使用system out在点1和点2打印this.toString(),它给出的值相同。谁能告诉我为什么?这两个不应该给出不同的值吗?它们是不同的,请尝试以下方法: class A { void methodA { B b= new B(); b.methodB(); //point 1 } private class B { void methodB(){ //point
this.toString()
,它给出的值相同。谁能告诉我为什么?这两个不应该给出不同的值吗?它们是不同的,请尝试以下方法:
class A {
void methodA {
B b= new B();
b.methodB();
//point 1
}
private class B {
void methodB(){
//point 2
}
}
}
如果我在点1和点2使用system out打印这个.toString(),它会给出相同的值
我不同意你的看法
此
始终引用java中的当前对象引用
public class Test {
public static void main(String[] args) {
new A().methodA();
}
}
class A {
void methodA() {
B b= new B();
b.methodB();
//point 1
System.out.println(this.toString());
}
private class B {
void methodB(){
//point 2
System.out.println(this.toString());
}
}
}
结果-样品$B@9304b1
Sample@190d11
请参见内部类方法,它打印
示例$B@9304b1
其中Sample是基类,B是内部类和hashcode。其中class方法打印带有@
和hashcode的类名
两个哈希代码都不同,因此两个对象都不同。所以这是指不同的对象实例 这是
toString()方法的行为。您正在访问这个关键字,它引用类的当前实例。
正如visal_aim在第1点发布的这种情况下的答案一样,该
关键字将指A类实例,在第2点
它将指B类实例。
您得到的答案是相同的,因为在这两个点上,这个
是对象的类型
,它将返回相同的字符串。(直到您重写了基本对象类的toString()方法)。简单的答案是第1点和第2点打印不同的内容。。。除非您重载了toString()
方法:
您的程序:
void methodA() {
B b = new B();
b.methodB();
// point 1
System.out.println(this.toString());
}
private class B {
void methodB() {
// point 2
System.out.println(this.toString());
}
}
当我运行它时打印这个
class A {
void methodA() {
B b= new B();
b.methodB();
System.err.println("point 1 - " + this.toString());
}
private class B {
void methodB(){
System.err.println("point 2 - " + this.toString());
}
}
public static void main(String[] args) {
new A().methodA();
}
}
事实上,输出清楚地告诉我们,这个
在第1点和第2点意味着不同的事情。在第1点,此
引用了A
的一个实例。在第2点,此
引用了A.B
的实例。此
始终引用调用该方法的对象/实例。因此,在“点1”处,该
将计算为A类实例,在“点2”处,该
将计算为B类实例(尤其是使用上面的new B()
创建的实例)。如果this.toString()
给出了相同的值,那么可能它“生成了相同的字符串”?根据您的进一步描述,您的问题标题可能会重复,这会产生误导。当您用不可编译的代码来说明问题时,也很难诊断出真正的问题是什么。
point 2 - A$B@58c3d9ac
point 1 - A@2207d8bb