java string和stringbuffer赋值
“Java String 和 StringBuffer 赋值”指的是在 Java 中给 String 和 StringBuffer 变量赋值时,背后发生的对象创建与引用变化。它和字符串不可变性、对象引用、以及循环拼接时的性能表现有关。
基本含义与用途
String 是不可变类,赋值后字符串内容不能改,每次拼接、替换都会产生新对象,变量只是指向新对象。StringBuffer 是可变的字符序列,赋值后仍可追加、插入、删除内容,修改发生在原对象上。简单说,String 赋值更像“换一个对象”,StringBuffer 赋值更像“改同一个对象”。
常见问题
常见困惑有几个:一是 `String s = "a"; s += "b";` 看起来改了 s,其实是新建了对象再让 s 指向它;二是把 StringBuffer 变量赋给另一个变量时,两个变量可能指向同一个对象,通过一个变量修改内容,另一个也会看到变化;三是在循环里用 String 反复拼接,容易产生大量临时对象,而 StringBuffer 更适合频繁修改的场景。另外,StringBuffer 的方法带同步,单线程下通常不如 StringBuilder 轻快。
怎么判断与怎么选
判断的关键看“内容是否需要频繁变”。字符串内容基本不变、作为常量或少量拼接,用 String 更直观;需要在循环中反复追加、插入、删除,且涉及多线程共享修改,选 StringBuffer;单线程下频繁修改,通常选 StringBuilder。赋值时还要注意:String 赋值后原对象不受影响,StringBuffer 赋值后要留意是否多个引用共享同一对象,避免意外修改。