菜鸟求解 还请给为大牛多多指教哈

小小阿狸 2012-03-31 07:51:20
String s1 = "123"; String s2 = "123";这两个在内存中有几份"123"?
String s = "123"; 和String s = new String("123")有什么区别 ?
我就是想知道它们在内存中的是怎么存储的 请稍微详细点 谢谢那
...全文
205 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这种东西在 CSDN 的 Java 版怎么没完没了的?每天都有人问!!!
找工作中 2012-04-03
  • 打赏
  • 举报
回复
虽然N年前考证件时有学这方面内容,现在对这些东西也很模糊了,因为在实际工作中根本用不上,除了面试时...作为爱好,支持一下,其实对于大牛们你们看到相同的问题觉得奇怪吗?知道答案的话,直接引用同类的贴就是了,对提问者可是受益匪浅...只是小小建议,莫怪...
loveDaro 2012-04-03
  • 打赏
  • 举报
回复
关键是大牛对于我们这些菜鸟的问题是不屑一顾的。。。
小小阿狸 2012-04-03
  • 打赏
  • 举报
回复
这位火龙果看起来是个大牛啊 哟哟哟
小小阿狸 2012-04-02
  • 打赏
  • 举报
回复
String s1 = "123";
String s2 = "123";
System.out.println(s1 == s2);
‘123”存储在字符创常量池中 就只有一份 , s1 s2在栈中 , s1 s2和都指向常量池中的"123”这块区域

String s1 = new String("123");
String s2 = new String("123");
new 一下在堆中就创建一个对象 所以在堆中有两个对象 栈中的 s1 s2分别指向这两个对象

找了点资料 我是这样理解的 不知道对不对
loveDaro 2012-04-02
  • 打赏
  • 举报
回复
对于String s = new String("123");
"123"在堆内存中就会产生一份。。这份是没有用的,会被回收。
new 的时候会在产生一份,这个s就是指向这个内存。
小小阿狸 2012-04-01
  • 打赏
  • 举报
回复
到底是只在常量池里有一份 还是在常量池里面一份 然后堆内存里面还有一份?
uoddsa 2012-04-01
  • 打赏
  • 举报
回复
两个吧 。
字符串池中有一个 。堆内存中有一个
  • 打赏
  • 举报
回复
恩,正在自己JAVA呢,有学到了点知识点
宏Lee 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

引用 1 楼 的回复:

String s1 = "123"; String s2 = "123",在你声明s1的时候就在栈内存分配了了一块内存,在你声明s2的时候,就会跑到内存池你找有没有123,找到了,他们就同时指向123这个内存
而String s = new String("123"),new的时候就在堆内存分配一块内存,s指向堆内存那块内存,没有new关键字,分配的内存就在栈里……
[/Quote]
String s1 = "123";
String s2 = "123";
System.out.println(s1 == s2);
这个就是证据啊啊。如果不知道内存咋个分配的,那就去找大学C语言老师或者把你那床底下那C语言教程拿出来看看,肯定会有的
蘑菇頭 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

String s1 = "123"; String s2 = "123",在你声明s1的时候就在栈内存分配了了一块内存,在你声明s2的时候,就会跑到内存池你找有没有123,找到了,他们就同时指向123这个内存
而String s = new String("123"),new的时候就在堆内存分配一块内存,s指向堆内存那块内存,没有new关键字,分配的内存就在栈里
[/Quote]

new 的时候 会给对内存分配一块内存, s指向对内存那块内存, 这个我只懂


但是 没new的时候 ,分配的就是 内存中的栈 ??? 这个 不清楚, 不知道 可否给点证据资料什么的???
宏Lee 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

String s1 = "123"; String s2 = "123",在你声明s1的时候就在栈内存分配了了一块内存,在你声明s2的时候,就会跑到内存池你找有没有123,找到了,他们就同时指向123这个内存
而String s = new String("123"),new的时候就在堆内存分配一块内存,s指向堆内存那块内存,没有new关键字,分配的内存就在栈里
[/Quote]
不是说的很清楚了的嘛?还是你没看哦
崔叫兽 2012-03-31
  • 打赏
  • 举报
回复
是就一个
小小阿狸 2012-03-31
  • 打赏
  • 举报
回复
那在内存中 就是只有一份“123”诺,是么?
90_後 2012-03-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

String s1 = "123"; String s2 = "123",在你声明s1的时候就在栈内存分配了了一块内存,在你声明s2的时候,就会跑到内存池你找有没有123,找到了,他们就同时指向123这个内存
而String s = new String("123"),new的时候就在堆内存分配一块内存,s指向堆内存那块内存,没有new关键字,分配的内存就在栈里
[/Quote]
同意一楼说的。。。
宏Lee 2012-03-31
  • 打赏
  • 举报
回复
String s1 = "123"; String s2 = "123",在你声明s1的时候就在栈内存分配了了一块内存,在你声明s2的时候,就会跑到内存池你找有没有123,找到了,他们就同时指向123这个内存
而String s = new String("123"),new的时候就在堆内存分配一块内存,s指向堆内存那块内存,没有new关键字,分配的内存就在栈里

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧