Java 它的真正含义是什么';这';在爪哇?

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

如果我使用system out在点1和点2打印
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