【问题标题】:Is the InputStream "int read(byte[] b)" method-parameter a reference?InputStream "int read(byte[] b)" 方法参数是参考吗?
【发布时间】:2015-05-30 02:59:04
【问题描述】:

我最近想知道像 InputStream int read(byte[] b) 方法这样的函数是如何工作的。我知道 Java 总是按值传递方法参数,而不是按引用传递。

知道这一点后,我不明白空字节数组在将其传递给读取方法后如何包含值(假设在 InputStream 中有要读取的字节)。据我所知,只有传递给 read-method 的值会在内部被触及,唯一​​的输出应该是读取的字节数(整数返回值)。但是字节数组仍然以某种方式填充。

这实际上是如何完成的?

【问题讨论】:

  • 引用是按值传递的,但它仍然是对原始字节数组的引用,所以可以用它来填充。

标签: java object reference inputstream


【解决方案1】:

像数组这样的对象是通过引用传递的。您可以将其视为对象变量是一个指针,并且该指针按值传递,这相当于同一件事。只有像 int 和 float 这样的原语才能真正按值传递。

【讨论】:

  • 原始类型是唯一真正按值传递的异常吗?
  • @Chirs 是的。但请注意,对于像字符串这样的不可变对象,按引用传递和按值传递几乎是等价的。
  • 不。引用是按值传递的,这与按引用传递和按值传递不同。
  • @Louis 有什么区别?我认为在 Java 的抽象级别上没有任何区别。
  • @Antimony:stackoverflow.com/questions/40480/… 解释了一些细节,但通过引用传递支持交换,而 Java 不支持。区别很重要。
【解决方案2】:

对 byte[] 的引用作为值传递。按引用传递意味着传递了保存对 byte[] 的引用的变量的地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-13
    • 2014-10-08
    • 2022-11-11
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多