0

このコード
で >> 5 8 ではなく >> 0 8 と表示される理由。このメソッドdoIt()は、既に割り当てられている Person p の数を変更しますが、int x は既に割り当てられており、 では変更されませんdoIt()。誰か理論的な説明を教えてくれませんか? 私はそれがどのように機能するかを理解しようとしています。ありがとう。

class Person{
   int number=0;
}

class Student extends Person
{
    int studentNumber;
}

public class Prog{


    public void doIt(int x, Person p)
    {
        x=5;
        p.number=8;
    }

    public static void main(String[] args) {

       Prog p = new Prog();
       p.test();

    }

    public void test()
    {
        int x=0;
        Person p = new Person();
        doIt(x,p);
        System.out.println(x);
        System.out.println(p.number);
    }
} 
4

2 に答える 2

3

Java は常に値渡しです

などのプリミティブintは値によって渡されるため、xintestは決して変更されません。常に 0 です。 のローカル コピーのみxdoItに変更され5ますが、その値はメソッドdoItが終了すると消えます。

プログラムには 2 つのx変数があります。

  • xin :はtest0 に初期化され、変更されることはありません。
  • xin doIt: 0 に初期化され、5 に変更され、使用されません。

オブジェクトへの参照Personは値渡しされますがdoIt number元のオブジェクトで変更されるため、 に変更されます8

プログラムには 2 つのp変数があります。

  • pin test: 新しいPersonオブジェクト に初期化されます。number0 に初期化されます。
  • pin : inと同じオブジェクトをdoIt参照します。したがって、に変更すると、あなたが持っている唯一のオブジェクトが変更されます。 PersonptestdoItnumber5Person
于 2013-08-05T23:55:49.500 に答える
0

整数などのプリミティブ データ型は、データ参照ではなく値に基づいています。x が に渡されるとき、それは単に値によるものであるため、メソッドに設定x=0することによって、テスト メソッドの x の値が 0 に設定されることはありません。doItしたがって、メソッドで行うことはすべて記録されません。Person変更が発生するように、オブジェクトを渡す必要があります。

于 2013-08-05T23:56:02.613 に答える