黑马程序员技术交流社区

标题: 关于String创建了多少个对象?自己总结了下 [打印本页]

作者: 失眠的考拉    时间: 2015-7-27 00:03
标题: 关于String创建了多少个对象?自己总结了下
问题1:
String s1 = "abc";
String s2 = "abc";
请问上述程序在内存中创建了几个对象?毫无疑问,是一个对象(如果你觉得so easy,请直接阅读下个问题)。
因为JVM中有一个字符串常量池,新创建的字符串会先在字符串常量池查找是否存在相同的字符串,有则直接
赋值。


问题2:
String s3 = new String("bcd");
String s4 = new String("ef" + "123");

上述的s3和s4分别创建了几个对象。答案是,都是创建了两个对象。原因是new String()就会在堆中创建一个对象,
参数是字符串,也是一个对象。看到这里也许有人会觉得(“ef”+ "123")不是有两个吗?加上new一个就三个
对象了。那是由于字符串常量通过“ + ”操作时,编译器就进行了优化,相当于“ef123”。


作者: 洋葱头头    时间: 2015-7-27 08:33
记下了{:3_46:}{:3_46:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2