【问题标题】:How can FileInputStream.read change my byte array? [duplicate]FileInputStream.read 如何更改我的字节数组? [复制]
【发布时间】:2016-11-20 02:47:22
【问题描述】:

在我为家庭作业编写的程序中,我有一个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();
}

【问题讨论】:

  • 按值调用并不意味着对象不能被变异。 This answer 解释了这一点。
  • 变量 bytes 实际上是对数组对象的引用。当您将数组传递给方法时,您复制的是引用而不是引用所引用的实际数组。

标签: java arrays fileinputstream


【解决方案1】:

Java 将字节数组的引用传递给read 方法按值。这意味着read 方法不能使您的局部变量bytes 指向不同的字节数组,但它可以更改您传递给它的字节数组的内容。

(如果 Java 是“通过引用传递”,那么一个方法可以让你的局部变量指向不同的对象——这在 Java 中是不可能的)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-18
    • 2014-07-03
    • 2011-09-07
    • 2019-05-02
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    相关资源
    最近更新 更多