标题: 关于String s = new String("abc"); [打印本页] 作者: qiucheng1990 时间: 2012-10-26 07:23 标题: 关于String s = new String("abc"); 为什么说s在内存中有两个对象呢,那么s存放的是哪个对象的首地址呢?内存中都有什么池,字符串在常量池中是按char分开存储的吗
学习初期主要理清两个,堆内存与栈内存就可以了。
String是一个类,你通过new String("abc");就是在堆内存中开辟新空间实例化一个String对象。
具体如下图: 作者: 赵红萍 时间: 2012-10-26 21:49
String s = new String("abc")
new String("abc"),创建了一个String类型的对象,但是没有名字,这个对象指向存放字符串abc的那块内存,然后又创建了一个Sting类型的对象,对象名字是s,用s代表了那个没有名字的对象.作者: 张其辉 时间: 2012-10-26 23:05
其实创建字符串对象有三种方法:
1、String s="name";创建一个字符串对象,内容为name
2、String s=new String();创建一个内容为空的字符串对象
3、String s=new String("name");创建一个字符串对象“name”
第三种是两个对象,因为“name”本身就是一个对象了,s作为一个新的对象,其实他的对象内部存了“name”对象的地址,这个地址指向了“name”对象;作者: 任雷彬 时间: 2012-10-27 14:47
String s = new String("abc");
String s其实创建了两个对象,在编译期间java会把字符串“abc”放到字符串池的地方,在字符串池中所有相同的字符串会共享同一个内存空间。所以此时字符串“abc”就是一个对象。
new关键字的作用是通知编译器为对象分配内存空间,同时返回对象的引用,所以此时 对象的引用 s 指向new所通知编译器的分配的内存空间, s 指向新建对象的首地址,而不是 字符串池对象的首地址。