关于new String 对象的问题

三棵树aa 2016-10-26 04:20:11


a不是应该指向堆内存中的空间吗,为什么结果会是true
...全文
423 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 9 楼 u011429324 的回复:
[quote=引用 6 楼 chenziyu_ccut 的回复:] String a = new string("abc"); 这句话创建了两个String对象,一个在编译时的常量池中“abc”,一个是new出来的“abc”在堆中, 你a=“hello”,丢弃了原来常量池里的“abc”,变成指向常量池中hello,b也指向常量池中hello a==b就是true
但是 a 这个引用指向的是 堆内存里的空间, 和创建了几个对象没关系呀 堆内存里复制了常量池里的“abc”,之后改变的不应该是堆内存空间里的值吗 [/quote] 你要注意 String是一个final类,一旦赋值,该值就不可变,你让a=“hello”实际上是改变了a的引用,而不是改变了“abc”的值
qq_36525552 2016-10-26
  • 打赏
  • 举报
回复
字符串是存放在常量池的,所以"Hello"存放在常量池里。而a和b都指向"Hello",故a和b存的地址值都一样,都指向"Hello",所以”a = b“返回true。
Tlsy123 2016-10-26
  • 打赏
  • 举报
回复
a=“hello”这时a是栈里面的一个引用,指向常量池中的“hello”, java是只要常量池中有了就不会重新创建,所以b也指向常量池中的hello; 通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆空间;程序中的字面量(literal)如直接书写的100、"hello"和常量都是放在静态区中。栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用。
红糖小米粥 2016-10-26
  • 打赏
  • 举报
回复
常量池里么有abc,么有鱼丸粗面 你string a = ####不管等于什么 在你a=“hello”的时候,a就只指向常量池hello了 abc只存在于第一次new时候堆中,后来被舍弃了
三棵树aa 2016-10-26
  • 打赏
  • 举报
回复
引用 6 楼 chenziyu_ccut 的回复:
String a = new string("abc"); 这句话创建了两个String对象,一个在编译时的常量池中“abc”,一个是new出来的“abc”在堆中, 你a=“hello”,丢弃了原来常量池里的“abc”,变成指向常量池中hello,b也指向常量池中hello a==b就是true
但是 a 这个引用指向的是 堆内存里的空间, 和创建了几个对象没关系呀 堆内存里复制了常量池里的“abc”,之后改变的不应该是堆内存空间里的值吗
自由自在_Yu 2016-10-26
  • 打赏
  • 举报
回复
引用 6 楼 chenziyu_ccut 的回复:
String a = new string("abc"); 这句话创建了两个String对象,一个在编译时的常量池中“abc”,一个是new出来的“abc”在堆中, 你a=“hello”,丢弃了原来常量池里的“abc”,变成指向常量池中hello,b也指向常量池中hello a==b就是true
正解
  • 打赏
  • 举报
回复
没毛病
红糖小米粥 2016-10-26
  • 打赏
  • 举报
回复
String a = new string("abc"); 这句话创建了两个String对象,一个在编译时的常量池中“abc”,一个是new出来的“abc”在堆中, 你a=“hello”,丢弃了原来常量池里的“abc”,变成指向常量池中hello,b也指向常量池中hello a==b就是true
三棵树aa 2016-10-26
  • 打赏
  • 举报
回复
引用 2 楼 XxiaoxiaoL 的回复:
因为你重新赋值了啊!
a 指向堆空间 b 指向常量池 怎么会相等
三棵树aa 2016-10-26
  • 打赏
  • 举报
回复
a 指向堆空间 b 指向常量池 怎么会相等
dean1966 2016-10-26
  • 打赏
  • 举报
回复
因为你第二次赋值已经是a="hello"了呀
XxiaoxiaoL 2016-10-26
  • 打赏
  • 举报
回复
因为你重新赋值了啊!
dean1966 2016-10-26
  • 打赏
  • 举报
回复
对呀,就是应该这样的运行结果

62,625

社区成员

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

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