Java中如何比较char类型字符?计算器运算符判断代码失效求解
问题原因
你的代码存在两个核心错误:
char是Java的基本数据类型,不属于引用类型对象,本身没有equals()方法,直接调用会直接触发编译报错- 代码中
equals()的入参是双引号包裹的字符串"+",哪怕修改为包装类Character进行比较,参数类型不匹配也会永远返回false,完全不符合判断需求
正确比较char类型的方法
方法1:直接用==对比char字面量
char类型的字面量需要用单引号'包裹,作为基础值直接用双等号对比即可,你代码中的判断逻辑可以修改为:
if (thevindu == '+') { total = val1 + val2; System.out.println("计算结果:" + total); } else if (thevindu == '-') { total = val1 - val2; System.out.println("计算结果:" + total); } else if (thevindu == '*') { total = val1 * val2; System.out.println("计算结果:" + total); } else if (thevindu == '/') { // 增加除数为0判断逻辑更健壮 if (val2 == 0) { System.out.println("错误:除数不能为0"); } else { total = val1 / val2; System.out.println("计算结果:" + total); } } else { System.out.println("错误:输入的运算符不合法"); }
方法2:用switch分支判断(多分支场景更简洁)
Java原生支持char类型作为switch的判断参数,代码可读性更高:
switch (thevindu) { case '+': total = val1 + val2; System.out.println("计算结果:" + total); break; case '-': total = val1 - val2; System.out.println("计算结果:" + total); break; case '*': total = val1 * val2; System.out.println("计算结果:" + total); break; case '/': if (val2 == 0) { System.out.println("错误:除数不能为0"); } else { total = val1 / val2; System.out.println("计算结果:" + total); } break; default: System.out.println("错误:输入的运算符不合法"); }
额外注意事项
- char类型的字面量必须用单引号
'包裹,双引号包裹的是String字符串类型,两者是完全不同的数据类型 - 如果使用的是
Character包装类对象,建议先调用charValue()取出基础char值再用==比较,若使用equals()方法需要保证入参也是Character类型或char类型(char会自动装箱为Character)
内容的提问来源于stack exchange,提问作者Thevindu Senanayake
相关产品推荐
相关产品推荐

