我对java中return的新理解
一般来说return放在for循环中会终止程序的运行,但是我在使用lambda时发现了不同之处,特来分享
1.最简单的for循环
public void testCollectingAndThan() {
StringBuffer buffer = new StringBuffer();
for (int li = 0; li < 100; li++) {
if (li == 5) {
return;
}
System.out.println("li = " + li);
buffer.append(li);
}
System.out.println("buffer = " + buffer);
}
输出结果是
li = 0
li = 1
li = 2
li = 3
li = 4
此结果可以看出程序在i=5时会终止运行,没有打印buffer
2.list的普通forEach循环
public void testCollectingAndThan() {
List<String> list2 = Arrays.asList("a", "b", "c");
StringBuffer buffer = new StringBuffer();
for (String li : list2) {
if (li.equals("b")){
return;
}else {
System.out.println("li = " + li);
buffer.append(li);
}
}
System.out.println("buffer = " + buffer);
}
输出结果是
li = a
程序在 li 为“b”的时候终止运行,没有打印buffer
3.list的拉姆达(lambda)表达式forEach循环
public void testCollectingAndThan() {
List<String> list2 = Arrays.asList("a", "b", "c");
StringBuffer buffer = new StringBuffer();
list2.forEach(li -> {
if (li.equals("b")) {
return;
} else {
System.out.println("li = " + li);
buffer.append(li);
}
});
System.out.println("buffer = " + buffer);
}
输出结果是
li = a
li = c
buffer = ac
结果看出:程序在 li 为“b”时跳过继续向下执行for循环,并且最终执行了for外部的buffer打印,这说明在此时return的作用等价于continue。
4.对标题3的说明进一步精细化比较
public void testCollectingAndThan() {
List<String> list2 = Arrays.asList("a", "b", "c");
StringBuffer buffer = new StringBuffer();
list2.forEach(li -> {
if (li.equals("b")) {
System.out.println("li = " + li);//相对标题3增加一行打印输出
return;
} else {
System.out.println("li = " + li);
buffer.append(li);
}
});
System.out.println("buffer = " + buffer);
}
输出结果是
li = a
li = b
li = c
buffer = ac
更能看出其在 li 为 “b” 时没有终止程序,而是继续运行
工作心得,欢迎指正。