黑马程序员技术交流社区

标题: String类创建对象问题 [打印本页]

作者: 敲敲乐z    时间: 2016-8-9 00:25
标题: String类创建对象问题
String s = "a" + "b" + "c" + "d";
这个题目,一共创建了几个对象?
作者: Frankle    时间: 2016-8-9 11:46
一个,Java有常量优化机制。对于常量的运算,会将结果运算出来后,判断是否在数据类型的取值范围内,再将值赋予变量
作者: zhangjiesss    时间: 2016-8-9 22:19
创建一个对象
作者: wmc1994    时间: 2016-8-9 22:23
不是一个对象就是四个
作者: 夏:默秋凉    时间: 2016-8-10 23:40
创建了4个对象
既然说到这个问题 就不得不说String s = new String("aaaa");这个创建对象了
那么先说读者问的问题String s = "aa"+"ss"+"ddd"+"fff";
这个是创建了4个对象,因为字符串就是String的匿名对象,只要有一个字符串就创建了一个对象就相当于new String()这个,他们指向了不同的堆内存空间,但是他们都存在常量池中,字符串就是常量大小不能改变(但是StringBuffer和StringBulider是可变字符串)

而String s = new String("aa");这个是开辟了两块堆内存空间,分别指向了各自的地址空间,地址值不同
作者: qetu001212    时间: 2016-8-10 23:51
一个。。。
作者: lvyanxin    时间: 2016-8-11 11:26
就创建了一个
String s = "a" + "b" + "c" + "d" ;
赋值符号右边的"a"、"b"、"c"、"d"都是常量
对于常量,编译时就直接存储它们的字面值而不是它们的引用
在编译时就直接讲它们连接的结果提取出来变成了"abcd"
就相当于String s = "abcd"
然后当JVM执行到这一句的时候, 就在String pool里找
如果没有这个字符串,就会产生一个




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