You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中为何部分if/else语句无需使用大括号{}?

问题描述

我最近在完成CodingBat平台Logic-1模块的alarmClock任务时,编写了如下代码:

public String alarmClock(int day, boolean vacation) {
  if (!vacation) {
    if (0 < day && day != 6) {
      return "7:00";
    } else {
        return "10:00";
      }
  } 
  
  if (vacation) {
    if (0 < day && day != 6) {
      return "10:00";
    } else{
      return "off";
    }
  }
   
}

运行时一直提示编译错误:Compile Problems: missing return statement line:18。尝试调整无果后,我参考了朋友的正确代码:

public String alarmClock(int day, boolean vacation) {
  if (!vacation) {
    if(0 < day && day != 6)
      return "7:00";
    else
      return "10:00";
  } else if (day > 0 && day != 6)
      return "10:00";
    else
      return "off";
    
}

我注意到朋友的代码中部分if/else语句没有使用大括号{},而我所学的是if语句需要用大括号包裹代码块,因此想请教:为什么这些if/else语句可以省略大括号?

解答

为什么if/else可以省略大括号?

在Java(还有不少和C语法类似的语言)里,if或者else语句后面只要只有一条执行语句,就可以不用写大括号。这条语句可以是return、赋值,甚至是另一个嵌套的if/else。

比如你朋友代码里的这段:

if(0 < day && day != 6)
  return "7:00";

这里if后面就只有return "7:00";这一行代码,所以大括号可以省掉。else后面的return "10:00";也是同样的道理,单条语句就能省略大括号。

不过要提醒一句:虽然语法允许这么做,但如果之后要给这个if/else加新代码,忘记补大括号的话,很容易出逻辑bug——新代码会不受if/else的条件控制,直接执行。所以很多团队会要求哪怕单条语句也要加大括号,方便后续维护。

顺便说下你原来代码的编译错误

你碰到的missing return statement错误,是因为编译器不认你那两个独立的if逻辑。虽然我们知道vacation要么是true要么是false,但编译器不会做这么智能的逻辑推导——它看到你写了两个分开的if (!vacation)和if (vacation),就会觉得可能存在一种情况,两个if都不满足(虽然实际不可能),所以要求你必须在函数最后加个return,或者把第二个if改成else,让编译器确定所有路径都有返回值。

内容的提问来源于stack exchange,提问作者intEOF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 20:55:23