从局部变量创建ByteArrayInputStream是否有效?

时间:2018-06-21 14:52:05

标签: java variables garbage-collection inputstream local

假设一个函数如:

InputStream func() {            
       byte[] buffer = new byte[] {0,1,2,3};

       return new ByteArrayInputStream(buffer);
}

如果我调用该函数,垃圾回收器是否有可能删除'buffer'变量而InputStream不再起作用?

2 个答案:

答案 0 :(得分:1)

  

垃圾回收器是否有可能删除“缓冲区”   变量和InputStream不再起作用?

否,不允许垃圾收集器删除仍在引用的对象。从ByteArrayInputStream对象内部引用该对象(其内部buf成员引用该对象)。

答案 1 :(得分:0)

如果您将看到ByteArrayInputStream的构造函数,则会看到以下内容

 public ByteArrayInputStream(byte buf[]) {
        this.buf = buf;
        this.pos = 0;
        this.count = buf.length;
    }

因此,您可以看到对字节数组的引用存储在InputStream对象中:this.buf = buf。并且GC不会收集具有强引用的对象。没什么可担心的。