java中的String常量是存放在栈中还是堆中? 50
有人说字符串是放在栈中的,有人说是在堆中。还有一种说法是放在字符串池中。到底是放在哪里呢?请高手详细解释一下,解释的清楚另有100分相送!...
有人说字符串是放在栈中的,有人说是在堆中。还有一种说法是放在字符串池中。到底是放在哪里呢?请高手详细解释一下,解释的清楚另有100分相送!
展开
10个回答
展开全部
系统内存一般情况来说分为四个
heap 堆 放 对象 也就是new 出来的东西
stack 栈 放局部变量
static segment 静态区 用来放 静态变量 和字符串常量
data segement 代码区 用来放代码的
如果 一个字符串是 String s = "abc";它放在栈里
如果一个字符串 用创建对象的方式 String s = new String("abc");
那它是放在了 堆里 而如果单纯的 一个 "abc" 这个输入字符串常量 是放在static segement里
heap 堆 放 对象 也就是new 出来的东西
stack 栈 放局部变量
static segment 静态区 用来放 静态变量 和字符串常量
data segement 代码区 用来放代码的
如果 一个字符串是 String s = "abc";它放在栈里
如果一个字符串 用创建对象的方式 String s = new String("abc");
那它是放在了 堆里 而如果单纯的 一个 "abc" 这个输入字符串常量 是放在static segement里
展开全部
String 是放在字符串池中
只有通过new String("");方式创建的字符串才会放在堆中
如果是通过String str = "abc";这样的方式创建的字符串
会在编译器就放在字符串池中,你可以用16进制编辑工具,
打开.class文件,你会发现在文件中就有abc这个值
只有通过new String("");方式创建的字符串才会放在堆中
如果是通过String str = "abc";这样的方式创建的字符串
会在编译器就放在字符串池中,你可以用16进制编辑工具,
打开.class文件,你会发现在文件中就有abc这个值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
字符串放在栈中。只有new的对象才放在堆中。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
String str1="helloworld";
String str2=new String("helloworld");
str1指向的对象放在栈中,
str2指向的对象放在堆中(存放的是字符串"helloworld"在内存中的地址)
即:str2->对象->"helloworld"
如果在创建
String str3="hello";
String str4=new String("helloworld");
则有:str1==str3;str2.equals(str4),str2!=str4
String str2=new String("helloworld");
str1指向的对象放在栈中,
str2指向的对象放在堆中(存放的是字符串"helloworld"在内存中的地址)
即:str2->对象->"helloworld"
如果在创建
String str3="hello";
String str4=new String("helloworld");
则有:str1==str3;str2.equals(str4),str2!=str4
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
string 字符串是经过final修饰的,在源码中就可以看到,所以string str= “123”声明的变量str是在栈区存放的,但声明变量的值‘123’是在常量池中存放的,如果是经过 new
String str = new String(123);这样的,变量名str是在堆区存放的,但‘123’还是在常量池中存在,在常量池中存放时会先看常量池中有没有这个‘123’值,有的话就把这个值的地址值赋给堆区中的str,没有就新建一个;
String str = new String(123);这样的,变量名str是在堆区存放的,但‘123’还是在常量池中存在,在常量池中存放时会先看常量池中有没有这个‘123’值,有的话就把这个值的地址值赋给堆区中的str,没有就新建一个;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询