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 335 天前 via Android 1
|
2
Belmode 335 天前
估计是为了安全的把 int 提升为 long ,防止在后续操中溢出吧。
感觉除了有点炫技以外,好像没啥用。 |
3
MrSheng 335 天前
个人见解:没啥目的,int 转成 long 也不会溢出啊。完全没必要加这个移位。
|
4
gongxuanzhang OP @misdake 感觉是正解了,我还说这么多换行之类的东西。。。奇奇怪怪
|
5
matepi 335 天前
long 和 int 还有一个差异,是否做大有届循环优化的问题
不知道这里是否会涉及这个考虑 |
6
proxytoworld 335 天前
显式转为 long 吧
|
7
xiangyuecn 335 天前
明摆着就是多余的代码,看 1 楼模板生成
|