Java在equals中用||对比字符串时报操作数类型错误如何解决?
问题原因
你当前的写法不符合Java语法规范,无法直接将||运算符放在equals方法的参数内完成多字符串匹配,报错的根因有两个:
- Java中的
||是逻辑或运算符,仅支持两个布尔类型的操作数参与运算,你传入的"skels" || "iceS"等都是字符串类型,不属于合法的操作数,因此直接抛出操作数类型不匹配的编译错误。 String.equals()方法仅支持传入单个Object类型的参数,无法同时接收多个待匹配的字符串。
正确实现方案
方案1:拆分独立判断(最通用,适配所有JDK版本)
将每个字符串的匹配判断单独拆分,再用||连接所有布尔结果即可,建议把常量字符串放在equals前避免a为null时触发空指针异常:
if("skels".equals(a) || "iceS".equals(a) || "fireS".equals(a) || "elecS".equals(a) || "healS".equals(a)) { card1 = 1; }
方案2:集合contains判断(待匹配字符串较多时更简洁)
如果JDK版本在9及以上,可以直接用List.of构造待匹配列表后判断:
if(List.of("skels", "iceS", "fireS", "elecS", "healS").contains(a)) { card1 = 1; }
低版本JDK可以提前将所有待匹配字符串存入ArrayList/HashSet后调用contains方法判断。
方案3:Stream匹配(Java 8及以上可用)
if(Stream.of("skels", "iceS", "fireS", "elecS", "healS").anyMatch(str -> str.equals(a))) { card1 = 1; }
内容的提问来源于stack exchange,提问作者Houston Forbes
相关产品推荐
相关产品推荐

