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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黄克帅 于 2012-5-26 11:26 编辑

String a= new String("张三")+"李四";创建了几个对象,创建过程是什么样的。求详细解释

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1

查看全部评分

4 个回复

倒序浏览
我认为分别是 “张三” “李四” new String("张三“) 和a 一共新建4个
回复 使用道具 举报
我觉得:张三和李四,都是常量,应该放在常量池里,而不是创建对象,然后new String(“张三”)是一个对象,new String(“张三”)+“李四”是一个对象。两个对象。而string s只是一个引用而已吧。
回复 使用道具 举报
本帖最后由 小小企鹅 于 2012-10-27 22:44 编辑

"张三"、"李四"、a、new String()四个对象
a是一个引用类型变量,
new String("张三")新建了一个对象,参数"张三"是字符串
"李四"是一个字符串,保存在常量池
a = "张三"+"李四"也是一个字符串,在常量池  

String的构造函数:
        public String(String original) {
                int size = original.count;
                char[] originalValue = original.value;
                char[] v;
                if (originalValue.length > size) {
                        int off = original.offset;
                        v = Arrays.copyOfRange(originalValue, off, off + size);
                } else {
                        v = originalValue;
                }
                this.offset = 0;
                this.count = size;
                this.value = v;
        }
执行 Arrays.copyOfRange(originalValue, off, off + size);将原来的字符串复制,赋值给this.value

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 jxj4227982333 于 2012-5-25 19:25 编辑

我认为是创建了四个对象,
String a = new String("张三")+"李四";
new String()是一个对象,“张三”是一个对象,存在于字符串池中,“李四”也是一个对象也存在于字符串池中,然后还有一个“张三”+“李四”又是一个对象,它们被“+”连接后创建一个对象在毕老师的视频中毕老师说String a = new String("abc");是创建军了两个对象。new String()和"abc"
而在这里却有四个对象。而a 并不是一个对象,它只是个String类型的变量而已。
我之前的回答错了,经过我上网查资料后,发现原来是这么回事。惭愧惭愧!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马