当我在 Java 中初始化一个数组时:
float[] array = new float[1000];
所有的元素都初始化为0。我这样直接分配buffer是不是也是这样:
FloatBuffer buffer = ByteBuffer.allocateDirect(4*1000).asFloatBuffer();
?我似乎总是只得到零,但也许它取决于实现......
最佳答案
看起来答案是可能。
查看 ByteBuffer
的实现,它在底层使用了 DirectByteBuffer
。查看实现 source code Android,它有这样的评论:
Constructs a new direct byte buffer of the given capacity on newly allocated OS memory. The memory will have been zeroed.
因此,当您分配缓冲区时,所有内存内容都将被初始化为零。 oracle 实现也执行此归零操作。
不过这是一个实现细节。由于 javadoc 没有说明归零,因此依赖它在技术上是不正确的。正确地说,您应该自己真正将缓冲区归零。在实践中,如果您出于某种原因真的担心性能,您可以将其省略,但请注意,JVM 的某些实现可能不会执行此归零操作。
关于java - Java中的直接缓冲区是否像数组一样初始化为默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6564361/