字符串是对象吗?是对象的话,为什么存储在字符串常量池中呢?栈内存是不可已存储对象的

 我来答
a11e90
2013-01-24 · 知道合伙人软件行家
a11e90
知道合伙人软件行家
采纳数:473 获赞数:1702
qq交流群:208779755 博客:https://my.oschina.net/haitaohu

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

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式