2

ヘッダーの質問は少しトリッキーなので、ここに私の問題があります:

1- arraylist のオブジェクト y を作成し、それを参照変数として割り当てました。

ArrayList<String> y = new ArrayList<String>();

2-ここで、配列に要素を追加しました。

y.add("Hello"); y.add("GoodBye");

ここで、文字列を返すメソッドを作成するときに、理解できない部分があります。

public String stringful(ArrayList<String> list)

配列の size() を取得しようとすると、 list.size() を使用しますが、なぜですか? y は元のオブジェクトではなく、y.size() を使用する必要がありますが、機能しないため、ここにいます。ありがとう

4

4 に答える 4

4

このメソッド ヘッダーを使用すると、次のようになります。

public String stringful(ArrayList<String> list)

このメソッドが という型のオブジェクトを使用することを宣言していArrayList<String>ますlist。ローカルで宣言しているためy、他のメソッドは存在すら認識していません。yもちろん、それがローカル変数であると仮定すると、そのメソッドからの参照はコンパイルされません。

Java のポインタ

新しいオブジェクトを作成するときは、そのオブジェクトへのポインターを使用します。たとえば、次のように宣言する場合:

ArrayList<String> y;

ポインタを作成しています。コードを追加する場合:

ArrayList<String> y = new ArrayList<String>();

これにより、新しいArrayList<String>オブジェクトへのポインターがy変数に入れられます。したがってy、パラメーターとしてメソッドに渡すときyは、オブジェクト自体ではなく、オブジェクトへのポインターを渡すことになります。これが、コードが で動作する理由list.size()です。sizeポインタが異なるだけで、まったく同じオブジェクトの値を取得するだけです。

概要

要約すると、実際に同じオブジェクトです。そのオブジェクトを見ているのは、単に異なるポインターです。

于 2013-05-06T17:32:39.933 に答える
3

ArrayList<String> yto メソッドstringfulへの参照をlist参照変数に渡しているため、を使用しますlist.size()。がそのメソッドで可視のインスタンス変数またはクラス変数でyない限り、そのメソッドには認識されません。の参照を渡すために使用されるローカル変数です。このようにして、 any の参照をそのメソッドに渡し、その長さを計算できます。そのメソッドで使用していた場合 (そのメソッドで が表示されている場合)、によって参照されるの長さだけを計算できたはずです。ylistyArrayList<String>y.size()yArrayList<String>y

于 2013-05-06T17:32:53.760 に答える
2

yローカル変数です。
宣言した関数内にのみ存在します。インスタンス
yを参照しArrayListます。

を記述するときはstringful(y)、このArrayListインスタンスをパラメーターとして関数に渡します。
関数内では、list「変数」(実際にはパラメーターですが、変数のように見えます) を使用してパラメーターの値を参照できます。これは、呼び出したときに渡した同じインスタンスを参照します。

于 2013-05-06T17:32:58.770 に答える