常量池和栈,堆是并列的概念吗?

常量池和栈,堆是并列的概念吗?inta=3;intb=3;这个共用的3是在栈中还是常量池中?帖子上看到有人说Strings="hello";这句话是在JDK的后续版本中出... 常量池和栈,堆是并列的概念吗?

int a=3;
int b=3;
这个共用的3是在栈中还是常量池中?

帖子上看到有人说 String s="hello"; 这句话是在JDK的后续版本中出现的,
我们知道
String s1="hello"
String s2="hello"
在内存层面上和下面
String s1=new String("world");
String s2=new String("world");

那么这里的“hello” 和 “world”储存在哪里,常量区?堆区
千万要精确的答案啊。帖子逛晕了快。
展开
 我来答
未命名__prince
2013-07-04 · TA获得超过248个赞
知道答主
回答量:196
采纳率:0%
帮助的人:169万
展开全部

看看这个应该就懂了吧   满意请采纳   不满意请追问!多谢合作

追问
嗯,基本上懂了,谢谢。
但你这个问题还没回答哦

int a=3;
int b=3;
这个共用的3是在栈中还是常量池中?

还有ss1=new String(“China") 这样的语句它与常量池一点联系也没有吗?
追答
String比较特殊,它有个专门的存储位置,在new的时候会先去内存里找,如果有就不会再创建了,而是把引用指向该地址

int a=3;
int b=3;
a=3, a的空间就是3,而a是一个地址而已 可以说a在栈中 3在常量池里面

ss1=new String(“China")
单单这样的话 那ss1表示没有声明类型 没有声明就不能够初始化 ss1会报错的
完整的应该是 String ss1 = new String("China");
或者 String ss1; ss1=new String(“China") ;

1、栈区(stacksegment)—由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放JVM内存资源

2、堆区(heapsegment)—一般由程序员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个对象就回收

3、静态区(datasegment)—存放全局变量,静态变量和字符串常量,不释放

4、代码区(codesegment)—存放程序中方法的二进制代码,而且是多个对象共享一个代码空间区域

满意请采纳 不满意请追问!多谢合作
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式