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

Java代码else代码块中Boolean类型变量keepGoing值未改变的原因是什么?

问题根因
  • 核心错误:代码中用StringBuilder类型的check实例直接调用equals方法和字符串"yes"比较。StringBuilder没有重写Object的equals方法,该方法默认比较两个对象的内存地址,而非存储的内容。check是StringBuilder实例,"yes"是String常量池中的对象,二者内存地址永远不同,所以比较结果永远是false,keepGoing自然不会变更为true。
  • 额外逻辑隐患:StringBuilder实例定义在循环外部,每次调用append都会拼接历史输入内容,就算后续修复了比较逻辑,多次输入后拼接的内容也会和预期的"yes"不符。
修复方案

直接废弃不必要的StringBuilder,用String类型接收用户输入直接比较即可,修改后else块代码如下:

else {
    System.out.println("it is not valid");
    System.out.println("do you want to continue: yes/no");
    String continueInput = display.next();
    keepGoing = continueInput.equals("yes");
}

如果确实需要使用StringBuilder,需要先调用toString()方法转成字符串再比较,同时每次循环前清空StringBuilder中的历史内容:

// 循环内每次使用前清空历史内容
check.setLength(0);
check.append(display.next());
keepGoing = check.toString().equals("yes");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:36:03