In the program I am writing for homework I have a FileInputStream
which I am reading bytes from into an array using the read()
method of the stream. I am not using the return value at all in my program, as I'm not interested in it.
However, I'm wondering how is it actually modifying my array? I read through many stackoverflow posts lasts night that indicated that Java is pass by value, not by reference, and I even proved it myself with a simple program.
How does this method modify my byte array?
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 passes the reference to the byte array to the read
method by value. This means that the read
method cannot make your local variable bytes
point to a different byte array, but it can change the contents of the byte array that you passed into it.
(If Java were "pass by reference", then a method could make your local variable point to a different object - which is not possible in Java)