当前位置:网站首页>String str = new String(“abc“) 到底创建了几个变量?
String str = new String(“abc“) 到底创建了几个变量?
2022-07-21 17:43:00 【花开不识君】
String str = new String(“abc”)创建了几个变量?
我的答案是1个或者2个
为什么呢?流程大概如下
在常量池中查找是否有“abc”对象
有则返回对应的引用实例
没有则创建对应的实例对象
在堆中 new 一个 String(“abc”) 对象
将对象地址赋值给str4,创建一个引用
所以常量池有"abc"就只创建了一个实例对象,否则会多在常量池中多创建一个对象
那String str1 = new String(“A”+“B” ) 会创建多少个对象?
我认为是和上面一样
因为编译器会自动优化
成
String str1 = new String(“AB”) ;
可以从字节码的角度看出来
public static main([Ljava/lang/String;)V
L0
LINENUMBER 11 L0
NEW java/lang/String
DUP
LDC "AB"
INVOKESPECIAL java/lang/String.<init> (Ljava/lang/String;)V
ASTORE 1
L1
LINENUMBER 12 L1
RETURN
L2
LOCALVARIABLE args [Ljava/lang/String; L0 L2 0
LOCALVARIABLE s Ljava/lang/String; L1 L2 1
MAXSTACK = 3
MAXLOCALS = 2
}
ps:字符串常量池在哪里?方法区?
jdk1.6有方法区。方法区里有运行时常量池
,这时期字符串常量池
在运行时常量池中,静态变量也在方法区中.。
jdk1.7把字符串常量池和静态变量放到堆里去了
。
jdk1.8把方法区改成了元空间
从虚拟机内存中独立出去到本地内存了,但字符串常量池
池还在堆
中
而运行时常量池
移动到了元空间
。
当然,以上所有只是个人通过阅读其他大佬的文章总结而来,欢迎大家讨论!
边栏推荐
- Hisilicon [hi3531]gpio lighting application and register operation
- position: -webkit-sticky; /* for Safari */ position: sticky;
- 单细胞论文记录(part18)--Spectral clustering based on learning similarity matrix
- 2021-09-23
- 关于 vditor 发布 plaintext 语法问题
- 浙大概率第四版,证明正态分布随机变量不相关等价于独立
- 创建线程池的七种方式
- 管正雄:基于预训练模型、智能运维的QA生成算法落地
- 正则 ^ $ 有什么用
- CAS原子类型
猜你喜欢
OpenGL画坐标轴指示图
腾讯游戏 :我们如何基于 StarRocks 构建云原生数仓
自定义View——点击冒泡效果
关于 vditor 发布 plaintext 语法问题
解决按钮UIButton重复点击问题
携程 Spark 多租户查询服务演进,Apache Kyuubi 未来可期
Token
Experimental support for decorators is a feature that is subject to change in a future release. Set
position: -webkit-sticky; /* for Safari */ position: sticky;
导入头文件到pch 出错
随机推荐
MySQL multi table query
CAS原子类型
Single cell literature learning (Part5) -- using cell to cell variability - a new era in molecular biology
Is Huatai app safe to open an account, and is the Commission very high
C语言——三种方式实现学生信息管理
创建新节点的点击事件
solo 文章中插广告不显示
"Everything is interconnected, enabling thousands of industries", the 2022 open atom global open source summit openatom openharmony sub forum is about to open
获取 (对象数组 / 数组) 的(最小 / 最大值)
js判断是否为整数
【幹貨】知識共享的障礙及解决方法
C语言——程序环境和预处理
Let me understand your MySQL storage engine
线程池七大参数
华泰证券渠道开户安全吗,怎么看是不是正规
解决 arr containsObject 方法每次都返回NO的问题
多线程常用类
加密方法简析
ArrayList源码解析
登录式shell和非登录式shell