为什么已转换为int类型的变量输出时会被当作String类型处理?
问题根因
你的int类型变量g本身没有被当作String处理,问题出在System.out.println中表达式的运算顺序和Java+运算符的重载规则:
- Java中
+是左结合运算符,运算顺序从左到右执行 - 当
+两侧任意一个操作数为String类型时,Java会自动将另一个操作数转为String类型,执行字符串拼接逻辑而非算术加法
你代码中表达式g +"\n" +g+1的运算拆解:
- 第一步运算
g + "\n":int类型的43和String类型的\n拼接,得到String结果"43\n" - 第二步运算
"43\n" + g:String和int类型的43拼接,得到String结果"43\n43" - 第三步运算
"43\n43" + 1:String和int类型的1拼接,得到最终输出的字符串"43\n431",和你看到的输出一致
修复方案
如果你要让后两个g和1优先执行算术加法,只需要给算术运算部分加括号提升优先级即可,修改打印语句:
System.out.println(g + "\n" + (g + 1));
修改后输出为:
43 44
你也可以单独执行System.out.println(g + 1);验证,会直接输出44,说明g本身确实是int类型,不存在类型被篡改的问题。
内容的提问来源于stack exchange,提问作者AltercatingCurrent
相关产品推荐
相关产品推荐

