java请教大神问题: String str="a,b,c"; 这里的abc在初始化的时候放在了常
java请教大神问题:Stringstr="a,b,c";这里的abc在初始化的时候放在了常量池Stringstr=newString("a");这个是str引用变量存在...
java请教大神问题:
String str="a,b,c";
这里的abc在初始化的时候放在了常量池
String str=new String("a");
这个是str引用变量存在栈中,a放在堆中,
可是有个问题,对于数组是这样吗?比如
String〔〕 str={"a"}和String〔〕 str=new String〔〕{"a"},为什么前者不放在常量池中? 展开
String str="a,b,c";
这里的abc在初始化的时候放在了常量池
String str=new String("a");
这个是str引用变量存在栈中,a放在堆中,
可是有个问题,对于数组是这样吗?比如
String〔〕 str={"a"}和String〔〕 str=new String〔〕{"a"},为什么前者不放在常量池中? 展开
3个回答
2015-04-17
展开全部
String[] a = {"a"};
String[] b = new String[]{"a"};
String c = "a";
String d = new String("a");
String[] e = new String[]{new String("a")};
System.out.println(a[0]==c);//true
System.out.println(a[0]==b[0]);//true
System.out.println(c==b[0]);//true
System.out.println(c==d);//false
System.out.println(c==e[0]);//false
所以我觉得前面三个的值应该是存储的位置是相同的,后两个应该存在了堆中。
既然能确定一个存在了字符串常量池中,那其他的应该是一样的了。
这里讨论的还是字符串吧,要换成其他new出来的对象,那么对象就是存储在堆中的了。
java中String类型是不可变的,所以根据下面的话应该是这样的:
对于字符串来说,其对象的引用都是存储在栈中的,如果是编译期已经创建好(即指用双引号定义的)的就存储在常量池中,如果是运行期(new出来的对象)则存储在堆中。
上面是网上找来的,反正就是这个意思了。
追问
果然大神!我也这么想的,不过为什么对于a或者b,一些书中说它们放在栈中?数组中内容放在堆中,常量池不是放在方法区吗?
展开全部
这是数组创建的其中一种
在JAVA中创建数组有两种方式 (1)静态创建 如String[] array = {"a", "b", "c"}; (2)动态创建 如String[] array = new String[] {"a", "b", "c"};或String[] array = new String[3];(先确认元素个数) 一般情况下习惯使用动态创建方式 比较灵活 可以先规定元素个数 后对每个元素进行赋值
他是放在堆中的
望采纳!
在JAVA中创建数组有两种方式 (1)静态创建 如String[] array = {"a", "b", "c"}; (2)动态创建 如String[] array = new String[] {"a", "b", "c"};或String[] array = new String[3];(先确认元素个数) 一般情况下习惯使用动态创建方式 比较灵活 可以先规定元素个数 后对每个元素进行赋值
他是放在堆中的
望采纳!
更多追问追答
追问
String[] str=new String[]{"a","b","c"}也是静态创建方式好不好?
追答
你在查查看 是不是 你搞错了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道你是怎么判断前者不在常量池的,我用String str=“a”;String[] str={"a"};
str==str[0],结果是true,也就是说都是在常量池里的,你再好好判断一下吧
str==str[0],结果是true,也就是说都是在常量池里的,你再好好判断一下吧
更多追问追答
追问
你说的非常不错,可是我有个疑问,为什么一些书中对于String[] str={"a"}却说str放在栈区,a放在堆中,这又如何解释?常量池和栈有什么关系?
请问字符串池在哪?栈中?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询