请问java中,String a ="1";String b="2"; a=a+b;

请问java中,String a ="1";String b="2"; a=a+b+"33";b=b+"44"; 按顺序执行这4句代码一共创建了多少个对象。

初学者不要纠结这种问题,你不会是看了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会生成几个对象了,这和孔乙己的回字的几种写法一样,看似学究,鸟用都没有。追问

这话我不敢跟面试官说.....

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-11-04
String a="a" 可能创建一个对象或者不创建对象,如果"a"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("a").如果已经存在,a直接reference to 这个String池里的对象。 String str1 = new String("ABC") 至少创建一个对象,也可能两个。因为用到new 关键字,会在heap创建一个 str1 的String 对象,它的value 是 "ABC".同时,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC"). String 有一个intern() 方法,native,用来检测在String pool是否已经有这个String存在。希望对你有用!追问

这个我知道,但我想知道相加的,比如说str1=str2+str3; 三个字符串都是现有的,那么执行这段语句,是不是调用stringbuild算一个对象,然后重新创建一个str1又一个对象,这一句话留新建了两个对象。

本回答被网友采纳
第2个回答  2018-11-04
如果a=“1”算两个的话,那么一共8个。33和44算是单独的对象,与他们相加又另算一个。一共8个
第3个回答  2020-04-11
请问题主这个问题解决了吗?我最近面试也遇见了这个
相似回答