-1

InputStream クラスの 1 つのメソッドについて質問があります。

次のようなものがあります。

InputStream is;
byte[] b = new byte[64];

is.read(b);
// and now the byte array b contains data comming through InputStream???

.read()メソッドの使用法が次のようになるかどうかはわかります。

b = is.read();

read メソッドはバイト配列を返すためです。

しかし、実際のメソッドはどのようにしてその引数に何かを書き込んで、それをそれ自体の外に見えるようにすることができるのでしょうか?

それは私がこれを持っているようなものです:

String myString = "myText";

public void myMethod(String s) {
  s = "abc123";
}

myMethod(myString);
// and now is the content of myString equal to "abc123" instead of "myText" ???
// ANSWER: no!

返信ありがとうございます。

4

5 に答える 5

2

プリミティブ型以外はすべて Java のオブジェクト (配列を含む) です。オブジェクトは、あるメソッドから別のメソッドへの参照のコピーによって渡されます。したがって、呼び出されたメソッドが渡されたオブジェクトに変更を加えた場合、メソッドは最終的に渡された同じオブジェクトに変更を加えています。したがって、変更は呼び出しメソッドにも反映されます。

これを詳細に理解するには、オブジェクトと、メソッド呼び出し間でオブジェクトがどのように渡されるかについて学ぶ必要があります。理解を深めるために、このリンクを参照してください。

于 2013-07-20T12:50:15.733 に答える
2

read メソッドはバイト配列を返すためです。

え?どこでそれを読みましたか。InputStream.read()メソッドは整数を返します

実際のメソッドは、どのようにして引数に何かを書き込んで、それをそれ自体の外で見えるようにすることができますか?

.read(byte[])が書き込む配列への参照を渡すためです。このメソッドの戻り値は、引数として渡されたバイト配列に実際に書き込まれたバイト数です。

このコードは機能します:

public void writeOneToFirstElement(final int[] array)
{
    array[0] = 1;
}

final int[] foo = { 0 };
writeOneToFirstElement(foo);
System.out.println(foo[0]); // prints 1
于 2013-07-20T13:00:50.630 に答える
0

配列はオブジェクトへの単なる参照であり、データが存在するアドレスが変更されても変更されないため、そのように機能し ます-pass.html
編集:タイプミス

于 2013-07-20T12:50:34.483 に答える
0

byte array同様String参照型です..それらを引数として渡すと、参照がコピーされ、それらはすべて同じオブジェクトを参照します..


たとえば、 aremoteは a への参照のようなものTVです。リモコンを別の人に渡しても、その人は引き続きTV

于 2013-07-20T12:50:35.227 に答える
0

オブジェクトは、あるメソッドから別のメソッドへの参照のコピーによって渡されます。したがって、呼び出されたメソッドが渡されたオブジェクトに変更を加えた場合、メソッドは最終的に渡された同じオブジェクトに変更を加えています。したがって、変更は呼び出しメソッドにも反映されます。たとえばString、パラメーターの を に置き換えてString[]、出力を確認します。

public static void main(String[] args) 
{
 String[] myString =  {"myText"};
 myMethod(myString);
 System.out.println(myString[0]);
}

public void myMethod(String[] s) {
  s[0] = "abc123";
}
于 2013-07-20T12:59:18.283 に答える