2016-11-20 8 views
0

宿題のために書いているプログラムでは、read()ストリームのメソッドを使用して配列にバイトを読み込んでいるFileInputStreamがあります。私は私のプログラムでは、私はそれに興味がないので、戻り値を全く使用していません。FileInputStream.readはバイト配列をどのように変更できますか?

しかし、どうやって実際に配列を変更しているのでしょうか?私は多くのstackoverflow記事を読んで、Javaが参考になるのではなく、値渡しであることを示しています。私は単純なプログラムでそれを証明しました。

このメソッドはどのようにしてバイト配列を変更しますか?

+0

値によってコールがオブジェクトが「できることを意味するものではありませんt突然変異する。 [この回答](http://stackoverflow.com/a/40523/3824919)で説明しています。 – Tom

+1

可変バイトは実際には配列オブジェクトへの参照です。メソッドに配列を渡すときに、参照が参照する実際の配列ではなく参照をコピーしています。 –

答えて

1
try { 
    input = new FileInputStream(FileName); 
    bytes = new byte[input.available()]; 
    input.read(bytes); // reads file in as bytes and stores into bytes 
    System.out.println(bytes[0]); 


}catch(IOException e) 
{ 
    e.printStackTrace(); 
} 

Javaは値によってread方法にバイト配列に参照を渡します。つまり、readメソッドではローカル変数bytesを別のバイト配列にポイントすることはできませんが、渡したバイト配列の内容を変更することができます。

(Javaは「参照渡し」だった場合、この方法は、別のオブジェクトに、ローカル変数のポイントを作ることができる - Javaでは不可能である)

関連する問題