上一篇地址:整理好了!2024年最常见 100 道 Java基础面试题(三)-CSDN博客
七、i++ 和 ++i 的区别?
这两个表达式都是用于整型变量的自增操作,但它们在执行时的值和行为有所不同。
-
i++
(后缀自增):i++
被称为后缀自增操作符,它将变量i
的值增加一,但表达式i++
的值是自增之前的i
的值。- 在表达式执行完毕后,
i
的值会加一,但表达式的结果(也就是提供给其他操作的值)是自增之前的原始值。
-
++i
(前缀自增):++i
被称为前缀自增操作符,它同样将变量i
的值增加一,但表达式++i
的值是自增之后的i
的值。- 在表达式执行时,
i
立即加一,表达式的结果就是增加后的值。
行为示例:
int i = 0;
// 使用后缀自增
int a = i++; // a 被赋值为 0,之后 i 的值变为 1
// 使用前缀自增
int b = ++i; // i 先增加 1,变为 2,然后 b 被赋值为 2
在这个例子中,i++
将 i
的值增加到 1,但表达式 i++
的结果是 i
自增前的值,即 0。而 ++i
在表达式 ++i
被求值之前就将 i
的值增加到 2,所以赋给变量 b
的值也是 2。
注意:
- 在单独的自增语句中(没有将结果赋值给其他变量),
i++
和++i
对变量i
的最终影响是相同的,都使i
增加了一。 - 在复杂的表达式中,
i++
和++i
可能会导致不同的计算结果,因为它们提供的值不同。
性能考虑: 在某些编译器或某些上下文中,前缀自增 ++i
可能比后缀自增 i++
有更优的性能,因为后缀自增可能需要编译器生成额外的代码来保存原始值,但这是底层实现相关的,现代编译器通常会优化这一点。
总的来说,选择使用 i++
还是 ++i
取决于你希望表达式的结果是什么,以及你的代码风格和可读性要求。
八、while 和 do while 有啥区别?
Java提供了几种不同的方式可以退出循环体,这些方式包括使用 break
语句、continue
语句以及 return
语句。下面是每种方式的详细说明:
-
break
语句:break
语句用于立即终止包含它的循环的执行,无论是for
循环、while
循环还是do-while
循环。- 当
break
语句被执行时,循环会被完全终止,控制流程会跳转到循环体之后的下一条语句。
for (int i = 0; i < 10; i++) { if (i == 5) { break; // 当 i 等于 5 时退出循环 } System.out.println(i); }
-
continue
语句:continue
语句用于跳过当前循环的剩余部分,并立即开始下一次循环迭代。- 当
continue
被执行时,会跳至循环的迭代条件判断,如果条件满足,将继续执行循环体。
for (int i = 0; i < 10; i++) { if (i % 2 == 0) { continue; // 跳过偶数,只打印奇数 } System.out.println(i); }
-
return
语句:return
语句不仅可以用来从循环中退出,还可以用来从方法中返回一个值。- 当
return
语句被执行时,循环及包含它的方法会立即结束,控制流返回到调用该方法的地方。
public static void main(String[] args) { for (int i = 0; i < 10; i++) { if (i == 5) { return; // 当 i 等于 5 时退出循环和main方法 } } }
-
带标签的
break
:- Java 允许给循环体加上标签,然后用带标签的
break
语句来退出特定的循环。 - 这在嵌套循环中特别有用,因为普通的
break
只能退出最内层的循环。
outer: for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (j == 5) { break outer; // 退出外层循环 } } }
- Java 允许给循环体加上标签,然后用带标签的
-
抛出异常:
- 虽然不常见,但也可以抛出一个异常来退出循环,这通常不是推荐的做法,因为它可能会使错误处理变得复杂。
每种退出循环的方式都有其使用场景,选择哪一种取决于你的具体需求。通常,break
用于退出循环,continue
用于跳过当前迭代,而 return
用于退出循环并结束方法。带标签的 break
则用于更复杂循环结构中的控制。