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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨永峰 中级黑马   /  2012-5-27 21:08  /  5332 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨永峰 于 2012-5-27 21:32 编辑

如题:String str =new String("string");  new了几个对象??

—— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— ——

补问:String str="string"; 创建了几个对象??
           ————————————————————
  1. String str_1 = "string";
  2. String str_2 = "string"; ///以上两行代码创建了几个对象?
复制代码
  1. String str = "str" + "ing";///以上一行代码创建了几个对象?
复制代码

12 个回复

倒序浏览
  new 了一个对象. .   
  因为“String”  是在常量池中产生了一个常量字符串对象, 不是通过new出来的。  所以真正在堆内存中new出来的只有一个对象,
只不过是将常量池中的String字符串拷贝到了堆内存上。
回复 使用道具 举报
只new 了一个字符串常量
回复 使用道具 举报
Stirng str1 = new String("string");

//这个产生了2个对象,一个是new关键字创建的new Sring();另一个是“string”对象,abc在一个字符串池中str1这个对象指向这个串池
解释下字符串池:他是一个由字符组成的一个数组就相当于char str1 =new char[]{a,b,c};
如果不是遇到新的字符串,则直接指向原来的串池,如果遇到新的字符串则创建一个新的串池,个人以为因为java基本类型中中没有String类型,所以当出现新的字符串的时候需要以上面char 类型来创建一个数组对象。
回复 使用道具 举报
你是要问创建了几个新对象么
创建了2个对象
常量池中一个字符串对象"string"
而在执行new String("string")的时候,则将"string"作为参数传递给构造函数String(String original)
在堆内存中产生了一个新的字符串对象
并且把这个对象的地址赋给了str

所以一共创建了2个对象

附:
String(String original)
          初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
回复 使用道具 举报
String str_1 = "string";
先检查堆内存中是否存在“string”,如果存在,则将“string”所对应的堆内存地址赋值给str_1,
如果不存在,则在栈内存中创建“string”变量,在堆内存中创建“string”对象,

String str_2 = "string";
同理如上,这时会将String str_1 = "string";创建的对象地址赋值给str_2,

String str = "str" + "ing";
只是进行简单的字符串相加,可以理解为String str = "string";
回复 使用道具 举报
王月 中级黑马 2012-5-27 23:26:01
7#
本帖最后由 王月 于 2012-5-27 23:27 编辑

是产生了两个对象,new出来一个,常量池中还有一个。
1. new出来的对象在栈内存中。
2."String"这也是个对象,但在常量池里。

String s="string";
这个语句只创建了一个对象,而且存在于常量池中
回复 使用道具 举报
String str =new String("string");创建了两个对象,字符串"string"是一个对象,new的String类的str是一个对象,
String str="string";创建了一个对象"string"产生后就直接赋给了str。
回复 使用道具 举报
String str =new String("string");创建了两个对象,字符串"string"是一个对象,new的String类的str是一个对象,
String str="string";创建了一个对象"string"产生后就直接赋给了str。
回复 使用道具 举报
"abc"这个常量字符串是一个匿名的string对象,通过new string()操作又创建了一个对"abc"这个匿名对象的引用s,所以是两个对象
回复 使用道具 举报
1问
new 了一个对象。
2问
没有创建对象
回复 使用道具 举报
只不过是将常量池中的String字符串拷贝到了堆内存上。
回复 使用道具 举报
学习学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马