Java混合类型运算代码输出与预期不符,请求解析原因
Java表达式输出逻辑解析
你的代码里,表达式b+s+x+f+d+c+""+bool的实际输出和预期不符,核心是算术运算的自动类型提升和字符串拼接的触发时机在起作用,一步步拆解给你看:
第一步:先执行数值算术运算(从左到右)
Java里byte、short、char这类低精度数值类型,参与算术运算时会自动提升为int,之后的运算会逐步向更高精度的类型转换:
b + s:byte(10) + short(100) → 转成int计算,结果是110- 接着加x(125):110 + 125 = 235(还是int)
- 再加f(1.5f):int转成float,235 + 1.5f = 236.5f
- 再加d(21.231):float转成double,236.5 + 21.231 = 257.731
- 最后加c('c'):char类型会被转成对应的ASCII码值99,257.731 + 99 = 356.731(此时还是double类型)
第二步:触发字符串拼接
当运算到+ ""时,因为其中一个操作数是字符串,后续所有运算都变成字符串拼接:
356.731 + "":把double值转成字符串"356.731"- 再加bool(true):布尔值转成字符串
"true",最终拼接出"356.731true"
想要得到你预期的输出怎么办?
如果想直接拼接每个变量的字面量,或者先算b+s+x再拼接其他,需要提前触发字符串拼接:
- 直接全部字面量拼接:给表达式开头加空字符串,强制全程字符串拼接
输出:System.out.println("" + b + s + x + f + d + c + bool);101001251.521.231ctrue - 先算b+s+x再拼接其他:给这部分加括号,再触发字符串拼接
输出:System.out.println("" + (b+s+x) + f + d + c + bool);2351.521.231ctrue(和你预期的一致)
内容的提问来源于stack exchange,提问作者Rashen Fernando
相关产品推荐
相关产品推荐

