黑马程序员技术交流社区

标题: [已解决]String a= new String("张三")+"李四";创建几个对象? [打印本页]

作者: 黄克帅    时间: 2012-5-25 16:42
标题: [已解决]String a= new String("张三")+"李四";创建几个对象?
本帖最后由 黄克帅 于 2012-5-26 11:26 编辑

String a= new String("张三")+"李四";创建了几个对象,创建过程是什么样的。求详细解释
作者: 张晨    时间: 2012-5-25 17:02
我认为分别是 “张三” “李四” new String("张三“) 和a 一共新建4个
作者: 高云飞    时间: 2012-5-25 17:10
我觉得:张三和李四,都是常量,应该放在常量池里,而不是创建对象,然后new String(“张三”)是一个对象,new String(“张三”)+“李四”是一个对象。两个对象。而string s只是一个引用而已吧。
作者: 小小企鹅    时间: 2012-5-25 17:55
本帖最后由 小小企鹅 于 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
作者: 揭耀祖    时间: 2012-5-25 18:25
本帖最后由 jxj4227982333 于 2012-5-25 19:25 编辑

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





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