初学者不要纠结这种问题,你不会是看了think in java被带到沟里面了吧。
如果你想了解虚拟机的运行机制可以阅读
《深入java虚拟机》第二版,或者翻阅虚拟机规范,学习java字节码。
学会看字节码,你这都不是问题,javap xxx.xxx.class 就能查到字节码助记符。
而且随着
编译器不断的优化更新,每个版本都是不一样的。就目前而言,你说给出的语句会被java编译器优化:
例如 String a="1"+"2";会被直接优化成String a="12";
如果String a=b+c ;如果b和c能够在较近语句中找到b="3"; c="5";那么就会优化成String a="35";
如果不能直接找到对应的
常量语句,则编译为String a=new StringBuilder(c).append(b).toString();
所以别再思考什么String会生成几个对象了,这和
孔乙己的回字的几种写法一样,看似学究,鸟用都没有。
追问这话我不敢跟面试官说.....