常量池和栈,堆是并列的概念吗?
常量池和栈,堆是并列的概念吗?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”储存在哪里,常量区?堆区
千万要精确的答案啊。帖子逛晕了快。 展开
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”储存在哪里,常量区?堆区
千万要精确的答案啊。帖子逛晕了快。 展开
1个回答
追问
嗯,基本上懂了,谢谢。
但你这个问题还没回答哦
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)—存放程序中方法的二进制代码,而且是多个对象共享一个代码空间区域
满意请采纳 不满意请追问!多谢合作
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询