JDK 一段代码的疑问

130 天前
 gongxuanzhang

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 位目的是什么

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1005465

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX