2016-11-20 2 views
0

В программе, которую я пишу для домашней работы, у меня есть FileInputStream, который я читаю байты из массива, используя метод потока read(). Я не использую возвращаемое значение вообще в своей программе, так как меня это не интересует.Как FileInputStream.read изменить мой массив байтов?

Однако, мне интересно, как это на самом деле модифицирует мой массив? Я читал много сообщений stackoverflow, которые указывали, что Java передается по значению, а не по ссылке, и я даже сам это доказал с помощью простой программы.

Как этот метод модифицирует мой массив байтов?

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(); 
} 
+0

Вызов по значению не означает, что объект может» t быть мутированным. [Этот ответ] (http://stackoverflow.com/a/40523/3824919) объясняет это. – Tom

+1

Переменные байты на самом деле являются ссылкой на объект массива. Когда вы передаете массив методу, вы копируете ссылку, а не фактический массив, на который ссылается ссылка. –

ответ

1

Java передает ссылки в массив байт к read методе по значению. Это означает, что метод read не может сделать вашу локальную переменную bytes указателем на другой массив байтов, но он может изменить содержимое массива байтов, которое вы передали в него.

(Если Java были «пройти по ссылке», то метод может сделать вашу локальную переменную точку на другой объект - что невозможно в Java)

Смежные вопросы