黑马程序员技术交流社区
标题:
String的一点疑惑
[打印本页]
作者:
游灿平
时间:
2013-2-24 19:26
标题:
String的一点疑惑
String s = "a"+"b"+"c"+"d"+"e";
在内存中创建了几个对象啊?
作者:
李挺
时间:
2013-2-24 19:33
貌似这个问题前几天刚有人问
5个,6个,9个都有人说
不过有个人说是一个
因为这个句话编译后就成了String s="abcde";
我挺赞同的
作者:
折纸时代
时间:
2013-2-24 19:35
本帖最后由 司懿卓 于 2013-2-24 19:42 编辑
应该是创建了两个
一个是常量池里的字符串
一个是s引用的字符串..
String 是常量.. 或者应该说字符串是常量,只是String的引用在变.
作者:
陈圳
时间:
2013-2-24 19:37
应该是存在几个变量吧.没有new的话就数.有new的话就加一个 5个.
你可能认为String s也算一个,String s是在栈中建立了一个String对象引用变量s,他不算一个对象.只是一个引用变量.而"abc"是一个String的对象.
String 类刚开始的时候就说过了
String str="abc";//一个对象
String str=new String("abc")//两个对象
作者:
吴硕
时间:
2013-2-24 19:47
创建了0个或1个对象
在编译的时候,编译器已经做了优化,变成了
String s = "abcde";
在执行时,如果常量池中已有"abcde",则不会创建对象
如果没有,就创建一个对象
作者:
王宝生
时间:
2013-2-24 19:56
答曰:楼上说的好!
作者:
张宁
时间:
2013-2-25 15:40
创建了一个 。我就不浪费感情了。。他等于 String s = "abcde";
作者:
何伟
时间:
2013-2-25 20:22
其实就创建了一个
赋值符号右边的"a"、"b"、"c"、"d"、"e"都是常量
对于常量,常量编译时就直接存储它们的值而不是它们的引用
在编译时就直接把它们连接的结果算出来变成了"abcde"
该语句在class文件中就相当于String s = "abcde"
虚拟机执行的时候直接创建一个String s="abcde"
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2