回 帖 发 新 帖 刷新版面

主题:java String类内存分配的一个问题

String str = "123";
请问 这个字符串"123"是存在栈区还是存在堆区?

回复列表 (共1个回复)

沙发

就按你举得例子来说:String str="123";给你两个例子看一下有帮助没。
补充:这是一种直接指定的方式:其中"123"表示一个字符串对象,而str是"123"对象的地址,也叫做123"对象的引用。步骤: 1) 栈中开辟一块空间存放引用str, 2) String池中开辟一块空间,存放String常量"123", 3) 引用str指向池中String常量"123", 4) str所指代的地址即常量"123"所在地址,即(str=="123")的。
当这样创建时是在堆区:String str=new Sting("123");步骤: 1) 栈中开辟一块空间存放引用str, 2) 堆中开辟一块空间存放一个新建的String对象"123", 3) 引用str指向堆中的新建的String对象"123", 4) str所指代的对象地址为堆中地址,而常量"123"地址在池中,也就是说:str=="123",这个语句是错的。
注:不知道对不对,可以参考一下。

我来回复

您尚未登录,请登录后再回复。点此登录或注册