关于String类中new String(String original)的问题
来源:10-1 Java异常体系
weixin_慕哥1459466
2023-08-01
看了老师推荐的博客字符串常量池、class常量池和运行时常量池 https://blog.csdn.net/qq_26222859/article/details/73135660
有了如下理解,String a = new String(“1”)会在类加载时,在Heap上创建“1”,并将其引用驻留在全局字符串常量池中,后续调用执行的String类中new String(String original)方法的入参就是常量池中该引用,为了验证此观点,我写了如下代码,并在String类源码的public String(String original)方法上加入断点,并尝试比较original和“1”,如下
我不太理解为什么传进来的original和“1”不相等?他们不应该都等于全局字符串常量池中保留的“1”的引用的值吗?
写回答
1回答
-
翔仔
2023-08-02
同学好,
对于jvm底层,
String str = new String("1")
创建对象流程是什么?在常量池中查找是否存在"1"这个字符串;若有,则返回对应的引用实例;若无,则创建对应的实例对象;
在堆中new一个String类型的"1"字符串对象;
将对象地址复制给str,然后创建一个应用。
所以str持有的是对象地址,而"1"则直接是对象,不是一个东西
042023-08-02
相似问题