-3
class A {

    void methodA {
        B b= new B();
        b.methodB();
        //point 1
    }

    private class B {
        void methodB(){
            //point 2
        }
    }
}

システム出力を使用してthis.toString()ポイント1とポイント2の両方で印刷すると、同じ値になります。理由を教えてもらえますか?それらの2つは異なる値を与えるべきではありませんか?

4

4 に答える 4

2

それらは異なります。これを試してください:

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());
        }
    }
}
于 2012-12-20T07:02:38.427 に答える
1

システム出力を使用して、ポイント 1 とポイント 2 の両方で this.toString() を出力すると、同じ値が得られます。

私はあなたに同意しません。

this常に Java の現在のオブジェクト参照を参照します。

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());
    }
}

結果 -
Sample$B@9304b1
Sample@190d11

Sample$B@9304b1Sample が基本クラスで、B が内部クラスとハッシュコードである場合に出力される内部クラス メソッドを参照してください。クラスメソッドは、クラス名@とハッシュコードを出力します。

両方のハッシュコードが異なるため、両方のオブジェクトが異なります。したがって、これは別のオブジェクト インスタンスを参照します。

于 2012-12-20T07:03:29.240 に答える
1

toString()簡単な答えは、メソッドをオーバーロードしていない限り、ポイント 1 とポイント 2 は異なるものを出力するということです。

あなたのプログラム:

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();
    }
}

実行するとこれを出力します。

point 2 - A$B@58c3d9ac
point 1 - A@2207d8bb

実際、出力thisはポイント 1 とポイント 2 で異なることを意味することを明確に示しています。ポイント 1 ではthis、 のインスタンスを参照しますA。ポイント 2 で、thisのインスタンスを参照しますA.B

于 2012-12-20T07:21:23.080 に答える
0

さて、それはメソッドの動作です。クラスの現在のインスタンスを参照するキーワードにtoString()アクセスしています。 このような場合にvisal_aimが回答を投稿したように、point1キーワードはクラスAのインスタンスを参照し、 それはクラスBのインスタンスを参照します. 両方のポイントがタイプであり、同じ文字列を返す ため、同じ答えが得られます. (基本オブジェクト クラスの toString() メソッドをオーバーライドするまで)。this
thispoint 2
thisobject

于 2012-12-20T07:11:49.160 に答える