Java代码报错:operator+对double、boolean类型未定义,求输出拼接方案
嘿,这个问题我太熟悉啦!你遇到的报错根源在于:Java里+运算符有两种功能——算术加法和字符串拼接,而你的代码里前面的变量都是数值/字符类型(char会被自动转成对应的ASCII数值,比如'A'对应65),所以会先执行算术相加,直到遇到boolean类型的g时,Java找不到double和boolean相加的运算符,就抛出了那个错误。
而你想要的是把所有变量的值直接拼接成字符串输出,不用做算术运算,这里有几个简单的解决方案:
方法1:在表达式开头加空字符串(最简便)
只要在整个表达式最前面加上一个空字符串"",Java就会把整个表达式的+都当成字符串拼接来处理,所有变量都会自动转为对应的字符串形式:
System.out.println("" + a + b + c + d + e + f + g + h);
比如a=1会变成"1",b=0变成"0",f='A'变成"A",g=true变成"true",最终输出就是所有值连在一起的字符串。
方法2:手动将每个变量转为字符串(更明确)
用String.valueOf()方法把每个变量都转成字符串,再做拼接,这样完全不会有算术运算的歧义:
System.out.println( String.valueOf(a) + String.valueOf(b) + String.valueOf(c) + String.valueOf(d) + String.valueOf(e) + String.valueOf(f) + String.valueOf(g) + String.valueOf(h) );
这种方式适合需要精确控制每个变量转字符串逻辑的场景,比如你想给某个数值加格式的话,可以额外处理。
方法3:逐个输出变量(拆分更清晰)
如果变量比较多,也可以用System.out.print()逐个输出,最后用println()换行,效果和拼接完全一样:
System.out.print(a); System.out.print(b); System.out.print(c); System.out.print(d); System.out.print(e); System.out.print(f); System.out.print(g); System.out.println(h);
这种写法不会有任何运算混淆的问题,可读性也不错。
补充说明下报错原因
你的原始代码中,a + b + c + d + e + f会先做算术运算:int/short/long都会提升为double,char 'A'会转成ASCII值65,最终得到一个double类型的结果;然后尝试和boolean g相加,而Java不支持数值类型和boolean类型的加法运算,所以就出现了The operator+ is undefined for the argument type(s) double, boolean的报错。
内容的提问来源于stack exchange,提问作者Crox

