首页 > 试题广场 >

关于String、StringBuffer、StringBu

[单选题]
关于String、StringBuffer、StringBuilder以下说法错误的是
  • StringBuilder运行速度最快
  • StringBuffer是线程安全的
  • String的值是可变的
  • StringBuffer运行速度比String快
String是final修饰的,不可变
运行速度StringBuilder>StringBuffer>String
StringBuffer是线程安全的
发表于 2019-11-08 10:37:20 回复(2)
String的值一旦确认了就不可变,每次的变化实际上都创建了一个新的String,所以有多次变化时最好还是用StringBuffer更好。
发表于 2018-12-21 17:33:07 回复(1)
大家可以参考这篇博客,里面详细阐述了着三者的区别,欢迎指正。
编辑于 2020-01-14 11:28:04 回复(0)

String 底层是数组,还是用final修饰的

发表于 2019-08-31 14:38:47 回复(0)
记住了,String不可变,反射除外
发表于 2019-08-21 21:59:35 回复(5)
速度:string< stringbuffer <stringbuilder
发表于 2019-09-26 18:04:27 回复(0)

因为 String 是不可变类,所以每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象。StringBuilder 和 StringBuffer 每次都会对对象本身进行操作,而不是生成新的对象并改变对象引用,而 StringBuffer 有 synchronized 修饰,是线程安全的,所以性能比 StringBuilder 稍低一些。


编辑于 2020-09-02 07:43:44 回复(1)
关于String、StringBuffer、StringBuilder区别总结:
1.可变不可变
String用final修饰,所以string对象是不可变的
StringBuffer和StringBuilder都是继承AbstratStringBuilder,在AbstratStringBuilder中是使用字符串数组保存字符串,由此可知这两种对象是可变的
2.线程安全
String对象是不可变的,可以理解为常量,所以是线程安全的
StringBuffer对方法加了同步锁或者对被调用的方法加了同步锁,所以是线程安全的
StringBuilder没有对方法加同步锁,所以是非线程安全的
3.效率
String<StringBuffer<StringBuilder  
发表于 2020-09-22 16:53:07 回复(1)
String的底层实现是一个被final修饰的char[],这一点打开String源码就可以发现。而final修饰的成员变量是不可变的。
在这里顺便提一嘴,final修饰的成员变量如果是基本数据类型,那它就只能赋值一次,再次赋值会报错。如果是引用类型的话,其引用指向的地址是不可变的,但是地址里的内容是可以改的。提这么一嘴的原因是因为String的不可变恰恰相反,引用指向的地址是可变的,但是地址里的内容是不可变的。StringBuffer在多线程中是安全的,运行速度StringBuilder>StringBuffer>String
发表于 2021-12-08 09:06:42 回复(0)
这题选C,其他的都是正确的。
关于String的一些理解:
(1)String 是只读字符串,也就意味着 String 引用的字符串内容是不能被改变的。而 StringBuffer/StringBuilder 类表示的字符串对象可以直接进行修改。StringBuilder 是 Java 5 中引入的,它和 StringBuffer 的方法完全相同,区别在于它是在单线程环境下使用的,因为 它的所有方面都没有被 synchronized 修饰,因此它的效率也比 StringBuffer 要高。 在大部分情况下,效率是 StringBuilder > StringBuffer>String,这主要是由于前者不需要考虑 线程安全。 
(2)String 对象的 intern 方***得到字符串对象在常量池中对应的版本的引用(如果常量 池中有一个字符串与 String 对象的 equals 结果是 true),如果常量池中没有对应的字符串, 则该字符串将被添加到常量池中,然后返回常量池中字符串的引用; 
(3)字符串的+操作其本质是创建了 StringBuilder 对象进行 append 操作,然后将拼接后的 StringBuilder 对象用 toString 方法处理成 String 对象,用 javap -c StringEqualTest.class 命令 获得 class 文件对应的 JVM 字节码指令就可以看出。
发表于 2021-12-24 09:59:33 回复(0)
我是***,谢谢!***脑子知道这题让选错的,眼睛看到错的,手直接略过错的
发表于 2020-09-27 08:53:35 回复(0)
注意,这里说的的String是类,类的基层其实是模板,这里的变化是针对类的层面来说,而不是说你实例化出来的对象,可以进行不同的变化,String类本来就是一个不可变的类,一旦NEW出来,就等于在堆里面开辟空间,而这个空间可以理解为一个地址固定,但是空间不固定的一个区域,类的性质本来就是一个模板,当我们开拓之后,他的静态数据就不再变(除非我们让他改变),也就是说,这里的不变,其实是针对一开始开拓的那一刻,他就不再改变了。
发表于 2020-03-29 22:46:31 回复(0)
这题目真的是一坨屎
发表于 2023-07-02 15:09:35 回复(0)
  • String、StringBuffer和StringBuilder的比较
    • StringBuilder和StringBuffer非常类似,均代表可变的字符序列,而且方法也一样
    • String:不可变字符序列,效率低,但复用率高
      • 使用注意:string s = "a"; // 创建了一个字符串。s += "b" // 实际上原来的‘a"字符串对象已经丢弃了,现在又产生了一个字符串“ab”。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能。因此,如果我们对String做大量修改,不要使用String
    • StringBuffer:可变字符序列,效率较高(增删),线程安全
    • StringBuilder:可变字符序列,效率最高,线程不安全
  • String、StringBuffer和StringBuilder的选择
    • 如果字符串存在大量的修改操作,并在单线程的情况,使用StringBuilder
    • 如果字符串存在大量的修改操作,并在多线程的情况,使用StringBuffer
    • 如果字符串很少修改,被多个对象引用,使用String,比如配置信息等
     
发表于 2023-04-26 16:12:17 回复(0)
String是不可变的,效率最慢,StringBuffer和StringBuilder是可变的,StringBuffer在StringBuilder的基础上加了线程安全效率更低
发表于 2023-02-25 08:47:02 回复(0)
StringBuffer是一个字符串操作类。因为它主要提供各种操作,而操作的方式,是在所谓的Buffer也就是缓存的的一个字符数组中操作。
发表于 2022-10-12 20:28:43 回复(0)
String是final修饰的,不可变
在运行速度上StringBuffer因为兼顾了线程安全,效率不及StringBuilder
StringBuffer是线程安全的
发表于 2022-08-19 17:12:21 回复(0)
String n = "hello";
n = "mmm";
问:上面创建了几个对象?
答案:创建二个对象.
发表于 2022-06-23 08:13:33 回复(0)
记住啦,String不可变,只会生成新的String
发表于 2021-12-08 10:57:43 回复(0)
String是不可改变的
StringBuffer是线程安全的,就中间是线程安全的(下面的)
运行速度StringBuilder>StringBuffer>String
发表于 2021-11-02 20:19:50 回复(0)