V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gongxuanzhang
V2EX  ›  程序员

JDK 一段代码的疑问

  •  
  •   gongxuanzhang · 116 天前 · 1345 次点击
    这是一个创建于 116 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    7 条回复    2024-01-03 16:58:15 +08:00
    Belmode
        2
    Belmode  
       116 天前
    估计是为了安全的把 int 提升为 long ,防止在后续操中溢出吧。
    感觉除了有点炫技以外,好像没啥用。
    MrSheng
        3
    MrSheng  
       116 天前
    个人见解:没啥目的,int 转成 long 也不会溢出啊。完全没必要加这个移位。
    gongxuanzhang
        4
    gongxuanzhang  
    OP
       116 天前
    @misdake 感觉是正解了,我还说这么多换行之类的东西。。。奇奇怪怪
    matepi
        5
    matepi  
       116 天前
    long 和 int 还有一个差异,是否做大有届循环优化的问题
    不知道这里是否会涉及这个考虑
    proxytoworld
        6
    proxytoworld  
       116 天前
    显式转为 long 吧
    xiangyuecn
        7
    xiangyuecn  
       115 天前
    明摆着就是多余的代码,看 1 楼模板生成
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5361 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 07:16 · PVG 15:16 · LAX 00:16 · JFK 03:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.