整理好了!2024年最常见 100 道 Java基础面试题(四)

上一篇地址:​​​​​整理好了!2024年最常见 100 道 Java基础面试题(三)-CSDN博客

七、i++ 和 ++i 的区别?

这两个表达式都是用于整型变量的自增操作,但它们在执行时的值和行为有所不同。

  1. i++ (后缀自增)

    • i++ 被称为后缀自增操作符,它将变量 i 的值增加一,但表达式 i++ 的值是自增之前的 i 的值。
    • 在表达式执行完毕后,i 的值会加一,但表达式的结果(也就是提供给其他操作的值)是自增之前的原始值。
  2. ++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 语句。下面是每种方式的详细说明:

  1. break 语句

    • break 语句用于立即终止包含它的循环的执行,无论是 for 循环、while 循环还是 do-while 循环。
    • 当 break 语句被执行时,循环会被完全终止,控制流程会跳转到循环体之后的下一条语句。
    for (int i = 0; i < 10; i++) {
        if (i == 5) {
            break; // 当 i 等于 5 时退出循环
        }
        System.out.println(i);
    }
  2. continue 语句

    • continue 语句用于跳过当前循环的剩余部分,并立即开始下一次循环迭代。
    • 当 continue 被执行时,会跳至循环的迭代条件判断,如果条件满足,将继续执行循环体。
    for (int i = 0; i < 10; i++) {
        if (i % 2 == 0) {
            continue; // 跳过偶数,只打印奇数
        }
        System.out.println(i);
    }
  3. return 语句

    • return 语句不仅可以用来从循环中退出,还可以用来从方法中返回一个值。
    • 当 return 语句被执行时,循环及包含它的方法会立即结束,控制流返回到调用该方法的地方。
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            if (i == 5) {
                return; // 当 i 等于 5 时退出循环和main方法
            }
        }
    }
  4. 带标签的 break

    • Java 允许给循环体加上标签,然后用带标签的 break 语句来退出特定的循环。
    • 这在嵌套循环中特别有用,因为普通的 break 只能退出最内层的循环。
    outer: for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            if (j == 5) {
                break outer; // 退出外层循环
            }
        }
    }
  5. 抛出异常

    • 虽然不常见,但也可以抛出一个异常来退出循环,这通常不是推荐的做法,因为它可能会使错误处理变得复杂。

每种退出循环的方式都有其使用场景,选择哪一种取决于你的具体需求。通常,break 用于退出循环,continue 用于跳过当前迭代,而 return 用于退出循环并结束方法。带标签的 break 则用于更复杂循环结构中的控制。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值