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

Java中if语句判断运算符字符串始终为false的问题求助

问题分析与修复方案

从你的描述和代码来看,有两个核心问题导致了这个异常现象,咱们一步步拆解解决:

1. 字符串比较逻辑错误:误用==而非equals()

在Java里,==运算符比较的是两个字符串对象的内存引用地址,而不是字符串的实际内容。哪怕两个字符串内容完全一样,只要它们是不同的对象实例,==都会返回false。而equals()方法才是专门用来比较字符串内容是否相等的标准方式。

你的handleSolution方法里用了myOperator == "+"这种写法,这就是为什么无论你选哪个运算符,都会走到else分支输出"wtf"的根本原因。

2. 潜在的运算符文本冗余问题(从打印结果推测)

你提到点击+按钮后,打印的内容看起来是"+ 1",结合长度为1的输出,应该是打印格式导致的误解——实际是先输出了myOperator的值"+",下一行输出了长度1,看起来像是连在一起了。不过保险起见,还是要检查按钮绑定的文本是否意外带有空格(比如FXML里按钮文本写了"+ "而非"+")。

修复后的代码

把所有==替换为equals(),同时加上空指针防护和除数为0的判断(计算器必备):

public double num1, num2, num3;
public String myOperator;

@FXML
private void handleSolution(ActionEvent event){
    // 先判断运算符不为null,避免空指针异常
    if(myOperator != null){
        // 把常量放equals()前面,即使myOperator为null也不会报错
        if("+".equals(myOperator)){
            System.out.println("plus");
            num3 = num1 + num2;
        }else if("-".equals(myOperator)) {
            System.out.println("minus");
            num3 = num1 - num2;
        }else if("*".equals(myOperator)){
            System.out.println("multiplication");
            num3 = num1 * num2;
        }else if("/".equals(myOperator)){
            System.out.println("division");
            // 计算器必须加的除数非零判断
            if(num2 != 0){
                num3 = num1 / num2;
            }else{
                System.out.println("Error: Cannot divide by zero");
            }
        }else{
            System.out.println("Unknown operator");
            // 用引号包裹运算符值,方便直观查看是否有隐藏空格
            System.out.println("Operator value: '" + myOperator + "'");
            System.out.println("Operator length: " + myOperator.length());
        }
    }else{
        System.out.println("No operator selected");
    }
}

额外的保险检查

  • 检查FXML文件里的运算符按钮text属性,确保是纯"+"、"-"等,没有多余空格或特殊字符,比如:
    <Button text="+" onAction="#setOperator"/>
    
  • 在设置myOperator的按钮点击方法里,加上trim()去除首尾空白,避免意外的空格干扰:
    @FXML
    private void setOperator(ActionEvent event){
        Button btn = (Button) event.getSource();
        // trim()能去掉文本首尾的空格、换行符等空白字符
        myOperator = btn.getText().trim();
    }
    

这样修改后,你的运算符判断逻辑就能正常工作了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:37:31