0 0

问一个老生常谈的问题。。。String与StringBuilder5

 

String str = "a" + "b";真的只产生一个对象吗?

 

有javap -c能查看字节码是 ldc #3 //String ab,那真的表示只产生一个对象么?

 

字节码信息只显示String从常量池弹出;但并未显示,常量池的解析进程进入CONSTANT_String_info后的情况啊~~

 

进程解析CONSTANT_String_info的过程中,jvm又怎么连接"a" + "b"?

 

是不是只产生一个对象,默认StringBuilder连接?

 

又或者,

 

String str = "a" + "b";

 

String str_ = str + "c";(2)

 

像(2)所显示的字节码过程是一样的?

2014年8月01日 14:42

5个答案 按时间排序 按投票排序

0 0

这个跟StringBuilder无关,对于编译期就能确定的常量,编译器会直接计算出结果。
String str = "a" + "b";和String str = "ab";是没区别的。

2014年8月04日 15:42
0 0

  JAVA提供了两个字符类:String和StringBuffer。 它们可以储存盒操作字符串,既包含

多个字符的字符串数据。字符串String类提供了数值不可改变的字符串,而StringBuffer类

提供的字符串对象可以进行修改。当知道字符串数据要改变就可以是使用StringBuffer类创

建,典型地,可以使用StringBuffer类动态构造字符数据。

2014年8月03日 16:20
0 0

真是老生常谈的问题。如果要说的话,就得从string类型在jvm里的处理方式说起。。。一想起来,就觉得内容很长而且这里面还涉及到不同厂家对JVM规范实现的差异。不同厂家实现的差异,又会导致String类型的处理方式的不同。

2014年8月02日 15:14
0 0

String str = "a" + "b";真的只产生一个对象吗?

编译的时候就已经拼好了。

2014年8月02日 11:42
0 0

String类型是final型,每次拼接都是重新创建.
StringBuffer是char[]封装,你可以在IDE中看看封装代码

2014年8月02日 08:32

相关推荐

    String和StringBuilder类的区别

    多个线程可以安全地共享同一个字符串对象,而不必担心数据一致性问题。 - **StringBuilder**:`StringBuilder` 类默认是非线程安全的。虽然可以在单个线程中安全地使用 `StringBuilder` 实例,但如果多个线程同时...

    String、StringBuilder和StringBuffer的区别

    这意味着每次对String对象进行修改(如拼接操作),实际上都会创建一个新的String对象,这在频繁修改字符串内容时可能会导致大量的内存开销,特别是在多线程环境中,这种性能问题更加显著。例如,以下代码中,每进行...

    String StringBuffer和StringBuilder区别之源码解析

    "String StringBuffer和StringBuilder区别之源码解析" 在Java中,字符串是我们经常使用的数据类型,而String、StringBuffer和StringBuilder是Java中三种常用的字符串类。在这篇文章中,我们将从源码角度对String、...

    String、StringBuffer与StringBuilder之间区别

    String:字符串常量  StringBuffer:字符创变量  StringBuilder:字符创变量  从上面的名字可以看到,String是“字符创常量”,也就是不可改变的...对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:

    String、StringBuffer、StringBuilder的使用方法

    它在内存中的表现形式是字符数组,所以每次对`String`对象进行修改(如拼接)都会创建一个新的`String`对象,这可能导致大量的内存开销。例如: ```java String str1 = "Hello"; String str2 = "World"; String str...

    String和StringBuilder效率测试

    例如,可以创建一个包含大量字符串连接的操作,然后分别用`String`的`+`操作和`StringBuilder`的`append`方法执行,最后记录并比较两者的耗时。这样的测试可以帮助我们直观地看到,在频繁的字符串操作中,`...

    String、StringBuilder、StringBuffer 用法比较

    stringbuilder用法 String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String...

    String ,StringBuffer与StringBuilder

    String, StringBuffer 与 StringBuilder 的区别 在 Java 中,String, StringBuffer 和 StringBuilder 三个类都是用于字符操作的,但它们之间有着很大的区别。 首先,String 是不可变类,意味着一旦创建了 String ...

    Java-Java String和StringBuilder

    在这个例子中,所有的字符串操作都在同一个StringBuilder对象上进行,只在最后需要时通过`toString()`方法转换为不可变的String对象。 值得注意的是,虽然StringBuilder在单线程环境下表现优秀,但在多线程环境中,...

    String、StringBuilder、StringBuffer的区别

    String 的不可改变性使得每次操作时都需要创建新的对象,而 StringBuilder 和 StringBuffer 的可改变性使得可以在一个对象上操作,从而提高执行效率。 最后,从使用场景方面来说,如果要操作少量的数据,可以使用 ...

    测试string的+和String.Format()和StringBuilder.Append()性能差距|TestForString.7z

    这是因为`StringBuilder`在内存中维护一个缓冲区,直到最后才一次性生成字符串,减少了不必要的内存分配和垃圾回收。 测试方法通常包括编写循环,对每种方法执行相同次数的字符串连接操作,并记录各自所需的时间。...

    String-StringBuffer-StringBuilder

    此外,由于`String`对象是不可变的,多个线程可以安全地共享同一个`String`对象,而不用担心数据竞争问题。 接着,`StringBuffer`是在多线程环境下处理字符串的首选。它提供了一个可变的字符序列,允许在已有字符串...

    从内存方面解释Java中String与StringBuilder的性能差异.docx

    在Java编程中,String与StringBuilder都是用来处理字符串的类,但它们在性能上有显著的差异,这主要体现在内存管理和操作效率上。理解这些差异对于优化代码性能至关重要。 首先,String对象在Java中是不可变的,这...

    字符串、String类和StringBuilder类

    而string.Empty是一个长度为0的字符串常量,它同样表示空字符串,但避免了与null的混淆,特别是在进行条件检查时。 接下来,我们来看StringBuilder类。StringBuilder是用于构建和修改字符串的可变类,它提供了一种...

    String及StringBuffer和StringBuilder的区别

    String 类型是不可变的对象,每次对 String 对象进行改变时都会生成一个新的 String 对象,然后将指针指向新的 String 对象。这意味着,如果经常改变字符串内容,最好不要使用 String 类型,因为每次生成对象都会对...

    C#中String和StringBuilder的简介与区别

    C#中String和StringBuilder的简介与区别 String类型对象的特点: 1.它是引用类型,在堆上分配内存 2.运算时会产生一个新的实例 3.String 对象一旦生成不可改变(Immutable) 4.定义相等运算符(== 和 !=)是为了...

    跟我学Java-day13-String和StringBuilder.pdf

    day13-String和StringBuilder 1.String类 1.1字符串的比较【理解】 1.1.1==号的作用 比较基本数据类型:比较的是具体的值 比较引用数据类型:比较的是对象地址值 1.1.2equals方法的作用 方法介绍 示例代码 ...

    Tedu一段String和StringBuilder

    - Java 对 `String` 类型的一种优化措施,通过缓存字面量创建的字符串对象来减少内存开销。 - 使用直接量方式(如 `"hello"`)创建的字符串会被存放在常量池中。 - 当再次使用相同的直接量创建字符串时,会复用已...

    String,StringBuilder,StringBuffer.xmind

    String,StringBuilder,StringBuffer

Global site tag (gtag.js) - Google Analytics