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"},为什么前者不放在常量池中?
展开
 我来答
匿名用户
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,一些书中说它们放在栈中?数组中内容放在堆中,常量池不是放在方法区吗?
杰杰爱文文521
2015-04-17
知道答主
回答量:2
采纳率:0%
帮助的人:1710
展开全部
这是数组创建的其中一种

在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"}也是静态创建方式好不好?
追答
你在查查看 是不是 你搞错了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
神魔逍遥
推荐于2016-11-13 · TA获得超过559个赞
知道小有建树答主
回答量:520
采纳率:83%
帮助的人:200万
展开全部
不知道你是怎么判断前者不在常量池的,我用String str=“a”;String[] str={"a"};
str==str[0],结果是true,也就是说都是在常量池里的,你再好好判断一下吧
更多追问追答
追问
你说的非常不错,可是我有个疑问,为什么一些书中对于String[] str={"a"}却说str放在栈区,a放在堆中,这又如何解释?常量池和栈有什么关系?
请问字符串池在哪?栈中?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式