
open jdk 17, ByteBuffer 的一段代码
private ByteBuffer getArray(int index, byte[] dst, int offset, int length) { if ( ((long)length << 0) > Bits.JNI_COPY_TO_ARRAY_THRESHOLD) { long bufAddr = address + ((long)index << 0); long dstOffset = ARRAY_BASE_OFFSET + ((long)offset << 0); long len = (long)length << 0; try { SCOPED_MEMORY_ACCESS.copyMemory( scope(), null, base(), bufAddr, dst, dstOffset, len); } finally { Reference.reachabilityFence(this); } } else { int end = offset + length; for (int i = offset, j = index; i < end; i++, j++) { dst[i] = get(j); } } return this; } 我想知道这个左移 0 位目的是什么
1 misdake 2024 年 1 月 3 日 via Android |
2 Belmode 2024 年 1 月 3 日 估计是为了安全的把 int 提升为 long ,防止在后续操中溢出吧。 感觉除了有点炫技以外,好像没啥用。 |
3 LieNoWell 2024 年 1 月 3 日 个人见解:没啥目的,int 转成 long 也不会溢出啊。完全没必要加这个移位。 |
4 gongxuanzhang OP @misdake 感觉是正解了,我还说这么多换行之类的东西。。。奇奇怪怪 |
5 matepi 2024 年 1 月 3 日 long 和 int 还有一个差异,是否做大有届循环优化的问题 不知道这里是否会涉及这个考虑 |
6 proxytoworld 2024 年 1 月 3 日 显式转为 long 吧 |
7 xiangyuecn 2024 年 1 月 3 日 明摆着就是多余的代码,看 1 楼模板生成 |