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

翻看 Java10 里面的 ArrayList 源码,remove 方法里面有个 found: {} 这是什么意思呢?

  •  
  •   kpppp · 2019-10-15 11:13:38 +08:00 · 4237 次点击
    这是一个创建于 1848 天前的主题,其中的信息可能已经有所发展或是发生改变。
        public boolean remove(Object o) {
            final Object[] es = elementData;
            final int size = this.size;
            int i = 0;
            found: {
                if (o == null) {
                    for (; i < size; i++)
                        if (es[i] == null)
                            break found;
                } else {
                    for (; i < size; i++)
                        if (o.equals(es[i]))
                            break found;
                }
                return false;
            }
            fastRemove(es, i);
            return true;
        }
    

    地址: https://github.com/zxiaofan/JDK/blob/master/JDK10-Java%20SE%20Development%20Kit%2010/src/java.base/java/util/ArrayList.java

    12 条回复    2019-10-16 01:20:04 +08:00
    anofac
        1
    anofac  
       2019-10-15 11:21:00 +08:00
    java 的 label 语法,有点像其他语言的 goto,但不全是。"found"只是 label 的名字
    phantomzz
        3
    phantomzz  
       2019-10-15 11:23:12 +08:00
    可以看一下 java 跳出循环的几种方式,label 类似于 goto 语法,可以用来跳出多重循环
    guyeu
        4
    guyeu  
       2019-10-15 11:25:25 +08:00
    这个是很早就有的一个 java 特性,可以命名一个语句块然后通过 break name 的方式跳出该语句块
    Rwing
        5
    Rwing  
       2019-10-15 11:25:38 +08:00
    我比较好奇这 repo 存一堆 jdk 源码干什么。。。拿来当网盘吗?
    guyeu
        6
    guyeu  
       2019-10-15 11:26:17 +08:00
    个人觉得和 goto 完全不同,它只是跳出而不是跳到,没办法用它来实现循环
    kpppp
        7
    kpppp  
    OP
       2019-10-15 11:26:24 +08:00
    @anofac
    @phantomzz
    @IamNotShady
    非常感谢您们的帮助
    lihongjie0209
        8
    lihongjie0209  
       2019-10-15 11:37:45 +08:00
    高级一点的 break, 可以跳出多个循环
    chengyiqun
        9
    chengyiqun  
       2019-10-15 14:04:48 +08:00
    @guyeu 相当于阉割版的 goto 语句
    zazalu
        10
    zazalu  
       2019-10-15 16:03:28 +08:00
    很早就有的特性,就是一个 label,定位识别区分用的呗
    NotFoundEgg
        11
    NotFoundEgg  
       2019-10-15 16:49:30 +08:00
    是一种支持多层 break 的标签
    KINGOD
        12
    KINGOD  
       2019-10-16 01:20:04 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3440 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 00:06 · PVG 08:06 · LAX 16:06 · JFK 19:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.