A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谢毅 中级黑马   /  2013-1-18 22:32  /  1956 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谢毅 于 2013-1-19 12:56 编辑

String s="a"+"b"+"c"+"d";


8 个回复

倒序浏览
一个。。加号就是连接符吧。把它们都连接在一起啦。。就是一个abcd对象
回复 使用道具 举报
这样的定义,将这个字符创放在了常量池中
String s=new String("ss");既在堆内存中创建了对象,开辟了空间,还在常量池中声明了“ss”
回复 使用道具 举报
就一个String对象,因为=号后面都是常量,运行时等号后面直接成为了"abcd",s则指向了"abcd"
回复 使用道具 举报
1个
这句话在class文件中就相当于String s = "abcd"
然后当JVM执行到这一句的时候, 就在String pool里找
如果没有这个字符串,就会产生一个
回复 使用道具 举报
String s="a"+"b"+"c"+"d";
一共是四个吧..
每次string的创建引用是不同的.....
就等于这样...
String s="a";
String s="ab"+"c"+"d";
String s="abc"+"d";
String s="abcd";
回复 使用道具 举报
1个,String s = "abcd"
回复 使用道具 举报
1个  字符串abcd
回复 使用道具 举报
其实,你这个问题问的太笼统了,你根本就没法判断这个过程创建了几个对象(你说的是对象,不是String类对象)。如果这个代码之前,常量池中如果有了“abcd”串,那么它只是添加了个引用,没有创建String类对象。在执行+连接符运算时,是调用的StringBuilder的append方法,这个过程肯定创建了StringBuilder对象,但具体过程是怎么实现的,看源代码才能清楚。至于这个调用实现过程又创建了几个对象,鬼晓得~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马