这个表达式会创建四个对象。 当使用 `new` 关键字创建字符串时,会创建一个字符串对象,该对象包含了字符串的值和一些相关的属性和方法。因此,`new String("a")` 和 `new String("b")` 都会创建一个字符串对象,共创建了两个。 这个表达式执行的步骤如下: 1. 首先,创建一个 `new String("a")` 对象,将...
Stringa="Hello";//新建了一个对象Stringb=a;//没有创建对象,将a的引用赋值给了bSystem.out.println(a == b);//truea = a + b; String a = "Hello"在堆内存中新建了一个对象,并将对象存入字符串常量池中 String b = a没有创建对象,只是将a的引用赋值给了b,引用存放在栈内存中 a = a+b创建...
“A=A+B;”,说明同上,此处创建了一个对象,并由引用A来引用,那么原来A所指向的对象就成为垃圾对象,被回收; StringBuffer D= new StringBuffer("abc")", StringBuffer的特点是改变对象本身而不是创建新的对象,因此,此处及“D= D.append("567");”都是对同一个对象进行处理。而字符串对象也是一个对象,故有...
答案是2个 第一个是在堆中开辟了一块空间,存放String对象。 第二个是在字符串常量池中放入了一个"ab" 可通过其字节码证明。 字节码解释如下: 0new#2 <java/lang/String>这一步在heap中创建了一个String类型的对象。3dup 复制栈顶的值4ldc#3 <ab>将这个值"ab"push到常量池中6invokespecial#4 <java/la...
结论是 2 个对象。 二、String str = new String(“a”) + new String(“b”) 会创建几个对象 ? publicclassStringNewTest{publicstaticvoidmain(String[]args){String str=newString("a")+newString("b");}} javap -v StringNewTest.class反编译后, 部分片段如下: ...
在使用 `new String("a") + new String("b")` 的时候,会创建 3 个对象。 首先,由于 "a" 和 "b" 是字符串常量,因此在创建 `new String("a")` 和 `new String("b")` 时,会先在常量池中查找是否已经存在 "a" 和 "b"。 接着,由于使用了 `+` 运算符,即字符串连接操作,会创建一个新的...
首先看一下这道常见的面试题,下面代码中,会创建几个字符串对象?String s="a"+"b"+"c";如果你比较一下Java源代码和反编译后的字节码文件,就可以直观的看到答案,只创建了一个String对象。估计大家会有疑问了,为什么源代码中字符串拼接的操作,在编译完成后会消失,直接呈现为一个拼接后的完整字符串呢?这...
new String("abc")相当于new String(String s1="abc"),即先要执行String s1="abc"(2.1已经讲过了),然后再在堆区new一个String对象。 因此,现在可以解答本文的标题了,String s=new String("abc")创建了1或2个对象,String s="abc"创建了0或1个对象。
= "a";string b = "b";a = b;这样创建了两个字符串变量:对象a指向字符串常量"a",对象b指向字符串常量"b",然后再把对象a指向"b"。但是,C#中String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。
使用字面量时只创建一个常量池中的常量,使用 new 时如果常量池中没有该值就会在常量池中新创建,再在堆中创建一个对象引用常量池中常量。因此String a = "a" + new String("b") 会创建四个对象,常量池中的 a 和 b,堆中的 b 和堆中的 ab。 点赞 收藏 分享 C...