这个表达式会创建四个对象。 当使用 `new` 关键字创建字符串时,会创建一个字符串对象,该对象包含了字符串的值和一些相关的属性和方法。因此,`new String("a")` 和 `new String("b")` 都会创建一个字符串对象,共创建了两个。 这个表达式执行的步骤如下: 1. 首先,创建一个 `new String("a")` 对象,...
在使用 `new String("a") + new String("b")` 的时候,会创建 3 个对象。 首先,由于 "a" 和 "b" 是字符串常量,因此在创建 `new String("a")` 和 `new String("b")` 时,会先在常量池中查找是否已经存在 "a" 和 "b"。 接着,由于使用了 `+` 运算符,即字符串连接操作,会创建一个新的...
对象1:new StringBuilder() 对象2:new String("a") 对象3:常量池中的"a" 对象4:new String("b") 对象5:常量池中的"b" 深入剖析:StringBuilder中的toString(): 对象6:new String("ab") 强调一下,toString()的调用,在字符串常量池中,没有生成"ab" ——— String s1 = new String("1") + new St...
对象1: new StringBuilder() 对象2: new String(“a”) 对象3: 常量池中的"a" 对象4: new String(“b”) 对象5: 常量池中的"b" 深入剖析: StringBuilder 的 toString() 方法中有 new String(value, 0, count) , 对象6 :new String(“ab”) StringBuilder 的 toString() 的调用,在字符串常量池中,...
Stringstr =newString("ab"); 答案是2个 第一个是在堆中开辟了一块空间,存放String对象。 第二个是在字符串常量池中放入了一个"ab" 可通过其字节码证明。 字节码解释如下: 0new#2 <java/lang/String>这一步在heap中创建了一个String类型的对象。3dup ...
public String(String original) { //other code ...} 大家都知道,我们常用的创建一个类的实例(对象)的方法有以下两种:使用new创建对象。调用Class类的newInstance方法,利用反射机制创建对象。我们正是使用new调用了String类的上面那个构造器方法创建了一个对象,并将它的引用赋值给了str变量。同时我们注意到,被...
因为字符串是一个常用对象,频繁的创建会严重影响性能,而字符常量池就好比一个缓冲区,用来存放我们的字符串对象,做全局共享。 上面应该是我们在普遍得到的答案,但是我们知道在JDK7开始我们的字符串常量池已经在堆中了,没必要每个String对象都存放在字符串常量池中了,也可以只存放该字符串对象的引用。
问题一: String a = “a” + “b” + “c”; 创建了几个对象 答案:一个对象 javac编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期去进行加法运算处理,而是在编译时去掉其中的加号,直接将其编译成一个对应常量相连的结果。 问题一:String s = “aaa” + new String(“bbb”); ...
String s=new String(“abc“)创建了几个对象?,字符串常量池和运行时常量池是两个不同的概念。运行时常量池存储的是类的字面量,是每个类独有的,而字符串常量池存储的是字符串字面量,是所有类共享的。JDK1.7字符串常量池在方法区,JDK1.7之后字符串常量池就转移到了堆区
首先,new一个对象在堆中,将new String("abc")的对象的引用地址赋值给变量str。先去常量池查找“abc”是否存在。若存在,直接放引用地址;若不存在,创建“abc”对象,并将引用地址赋给String的有参构造里。 答案:如果常量池中存在,则只需创建一个对象,否则需要创建两个对象。