吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1599|回复: 6
收起左侧

[Java 转载] java中 “abc”与new String("abc")的区别

[复制链接]
nongfusanquan 发表于 2020-11-28 15:15
【不定期分享java知识点,从javase到springcloud,欢迎交流】

String s1 = “abc” 做了什么?
1. 在栈中创建了一个名为 s1 的变量(引用)
2. 如果 String池中没有“abc”存在,则在常量池中创建一个 String 类型的“abc”对象,有就不创建

3. 将“abc”的地址赋给s1

所以,此句到底创建了几个对象,根据“abc”的情况而定,“abc”之前存在就是一个,否则就没有创建。



String s2 = new String(“abc”) 做了什么?
1. 创建了一个名为 s2 的变量(引用)
2. 如果 String池中没有“abc”存在,则在 String池中创建一个 String类型的“abc”,有就不创建
3. 使用new关键字在堆中创建了一个String对象,将用new创建的String 对象的地址赋给s2,即s2是实例化对象在堆中的地址
【故再次new,String池中不改变,栈区多s3变量,堆区多新的对象并把地址赋给s3,故s2==s3错误,s2.equals(s3)正确。】

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

qihang5518 发表于 2020-11-28 20:49
小白一个,真不太懂这个,如果能在细致点介绍一下就好了
angel8327 发表于 2020-11-29 09:53
wzh202 发表于 2020-11-30 12:42
如果是String  类型的数据拼接的“abc”和原来直接复制的“abc”在内存中是发生了什么呢?
 楼主| nongfusanquan 发表于 2020-12-15 10:29
qihang5518 发表于 2020-11-28 20:49
小白一个,真不太懂这个,如果能在细致点介绍一下就好了

这个得先了解下jvm内存结构,慢慢来
 楼主| nongfusanquan 发表于 2020-12-15 10:35
wzh202 发表于 2020-11-30 12:42
如果是String  类型的数据拼接的“abc”和原来直接复制的“abc”在内存中是发生了什么呢?

这么理解,常量池中只要有一个“abc”对象(地址为s1),就不会再创建另一个“abc”对象了,其他的用到“abc”对象的,都是使用地址s1
 楼主| nongfusanquan 发表于 2020-12-15 10:36
angel8327 发表于 2020-11-29 09:53
怎么感觉和C++一样的做法~

C++我是小白,不过很多语言都有共通之处
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 22:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表