Strings1=newString(abc);这段代码创建了几个字符串对象?
发表于|更新于|整理归纳
|总字数:515|阅读时长:1分钟|浏览量:
String s1 = new String(“abc”) 这段代码创建了几个字符串对象?
字符串 "abc" 是一个对象 |
- 如果字符串常量池中不存在字符串对象“abc”的引⽤,那么会在堆中创建 2 个字符串对象“abc”。
- 如果字符串常量池中已存在字符串对象“abc”的引⽤,则只会在堆中创建 1 个字符串对象“abc”。
答案 : 会创建 1 或 2 个字符串对象
例题解析:
#创建了一个String对象 |
在JAVA虚拟机(JVM)中存在着一个字符串池,其中保存着很多String对象,并且可以被共享使用,因此它提高了效率。
String a="abc"
,这行代码被执行的时候,JAVA虚拟机首先在字符串池中查找是否已经存在了值为”abc”的这么一个对象,它的判断依据是String类equals(Object obj)
方法的返回值。
如果有,则不再创建新的对象,直接返回已存在对象的引用;
如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。
哪些情况下可以加入字符串池?
只有使用引号包含文本的方式创建的String对象之间使用“+”连接产生的新对象才会被加入字符串池中。
对于所有包含new方式新建对象(包括null)的“+”连接表达式,它所产生的新对象都不会被加入字符串池中
扩充知识点:
栈(stack):主要保存基本类型(或者叫内置类型)(char、byte、short、int、long、float、double、boolean)和对象的引用,数据可以共享,速度仅次于寄存器(register),快于堆。
堆(heap):用于存储对象。
文章作者: MUMU
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 blog.wo0ow.com!