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

2019-10-15 11:13:38 +08:00
 kpppp
    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

4103 次点击
所在节点    Java
12 条回复
anofac
2019-10-15 11:21:00 +08:00
java 的 label 语法,有点像其他语言的 goto,但不全是。"found"只是 label 的名字
IamNotShady
2019-10-15 11:21:48 +08:00
phantomzz
2019-10-15 11:23:12 +08:00
可以看一下 java 跳出循环的几种方式,label 类似于 goto 语法,可以用来跳出多重循环
guyeu
2019-10-15 11:25:25 +08:00
这个是很早就有的一个 java 特性,可以命名一个语句块然后通过 break name 的方式跳出该语句块
Rwing
2019-10-15 11:25:38 +08:00
我比较好奇这 repo 存一堆 jdk 源码干什么。。。拿来当网盘吗?
guyeu
2019-10-15 11:26:17 +08:00
个人觉得和 goto 完全不同,它只是跳出而不是跳到,没办法用它来实现循环
kpppp
2019-10-15 11:26:24 +08:00
@anofac
@phantomzz
@IamNotShady
非常感谢您们的帮助
lihongjie0209
2019-10-15 11:37:45 +08:00
高级一点的 break, 可以跳出多个循环
chengyiqun
2019-10-15 14:04:48 +08:00
@guyeu 相当于阉割版的 goto 语句
zazalu
2019-10-15 16:03:28 +08:00
很早就有的特性,就是一个 label,定位识别区分用的呗
NotFoundEgg
2019-10-15 16:49:30 +08:00
是一种支持多层 break 的标签
KINGOD
2019-10-16 01:20:04 +08:00

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

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

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

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

© 2021 V2EX