字符串是对象吗?是对象的话,为什么存储在字符串常量池中呢?栈内存是不可已存储对象的
2013-01-24 · 知道合伙人软件行家
关注
展开全部
。。肯定是对象啊 java里面万物皆对象就看你怎么理解了
你自己看看源代码String这个类 你就明白了
当然String还是有点特殊的 “字符串常量池” 占内存 储存的是变量 它指向“字符串常量池”中的字符串
你自己看看源代码String这个类 你就明白了
当然String还是有点特殊的 “字符串常量池” 占内存 储存的是变量 它指向“字符串常量池”中的字符串
追问
不是说对象只能存储在堆内存中吗?如果万物是对象,那么岂不是所有数据都是存储在堆内存中的?
追答
不是的 new 出来的对象是 放到内存中的 但 String是基本类型而且还是特殊的 如果String s=“abc” 会先检查常量池是否存在 如果存在s直接指向它 而不生成新的对象 如果你String str = new String("abc") 不会去检查常量池 而是直接创建 这个对象会存在堆中
还有就是java中所有的类都继承了 Object 你能说它不是对象吗?对象这个概念 你是怎么定义的呢?
内存分析:
栈:线性排列(有序)先进后出 入栈(压栈)出栈(弹栈)系统分配不灵活,访问速度快 线程不共享 装局部变量
堆:散列(无序)系统分配灵活 访问效率慢 装 new出来的东西
方法区:散列(无序)系统分配灵活 访问效率慢 可共享 装代码字符串常量,基本类型常量,static修饰的成员变量。
每个人有自己的理解方式 你一定要整理出一个适合自己的理解方式
展开全部
当你写成String str = "abc"的时候,它是直接存在栈内存中的,
当你写成String str = new String("abc")的时候,它的值是存在堆内存中 栈内存中只保存str变量
当你写成String str = new String("abc")的时候,它的值是存在堆内存中 栈内存中只保存str变量
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-01-25
展开全部
是对象,存储在常量池中统一管理,提高使用效率。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询