使用字符串String连接,方式有以下几种方式
1、用 “+” 加号连接字符串,如
String s = String0 + String1 + String2 + String3 + String4;
这里使用反编译工具,最终发现代码也是通过StringBuilder.append(连接)
2、使用 “+=”
String s = new String(); s += String0; s += String1; s += String2; s += String3; s += String4;
3、使用StringBuffer的append(Object)
StringBuffer stringBuffer = new StringBuffer(); String s = stringBuffer.append(String0).append(String1).append(String2) .append(String3).append(String4).toString();
4、使用StringBuilder的append(Object)
StringBuilder stringBuilder = new StringBuilder(); String s = stringBuilder.append(String0).append(String1).append(String2) .append(String3).append(String4).toString();
一般说来,
StringBuffer是线程安全的
StringBuilder是线程不安全的
JavaAPI中提到
StringBuffer 线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。 虽然在任意时间点上它都包含某种特定的字符序列, 但通过某些方法调用可以改变该序列的长度和内容。 可将字符串缓冲区安全地用于多个线程。 可以在必要时对这些方法进行同步, 因此任意特定实例上的所有操作就好像是以串行顺序发生的, 该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuilder 一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API, 但不保证同步。 该类被设计用作 StringBuffer 的一个简易替换, 用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。 如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
StringBuffer与StringBuilder的append(Object) 的方法
1、StringBuffer的append(Object Obj)源码
public synchronized StringBuffer append(Object obj) { super.append(String.valueOf(obj)); return this; }
API中的方法说明
追加 Object 参数的字符串表示形式。 参数将被转换成字符串,就好象使用了 String.valueOf 方法一样。 然后,将所得字符串中的字符追加到此序列。
2、StringBuilder的append(Object Obj)源码
public StringBuilder append(Object obj) { return append(String.valueOf(obj)); }
API中的方法说明
追加 Object 参数的字符串表示形式。 参数将被转换成字符串,就好象使用了 String.valueOf 方法一样。 然后,将所得字符串中的字符追加到此序列。
无论使用StringBuffer还是StringBuilder的append(Object obj)方法,
最终调用的都是String的valueOf(Object Obj)方法
而当对象为null时,调用String.valueOf(Object obj)返回的是"null" 字符串
所以在使用 StringBuffer或者StringBuilder做Object对象连接时,要注意Object是否为null
相关推荐
Java中的每个对象都继承自`Object`类,因此所有对象都默认拥有`toString()`方法。这个方法返回一个表示该对象的字符串,通常包括类名、哈希码等信息。如果你需要自定义对象的字符串表示,你应该重写`toString()`...
在多线程环境中,`StringBuffer`比直接使用`+`操作符或`StringBuilder`更推荐,因为它的所有方法都是同步的,避免了线程竞争条件导致的性能问题。 `StringBuffer`类包含了许多实用的方法,这些方法在处理字符串时...
JAVA 中有许多常用的类,每个类都有其特定的方法,本文将对 java.lang.Object 类、String 类和 StringBuffer 类的常用方法进行讲解。 一、java.lang.Object类 java.lang.Object 类是 JAVA 中所有类的父类,它提供...
对于循环中的字符串拼接,使用`StringBuilder`或`StringBuffer`比简单地使用`+`操作符更高效。这是因为每次使用`+`操作符时都会创建一个新的字符串对象,而在大量迭代的情况下,这种做法会显著降低程序的性能。 **...
需要注意的是,在 Java 5 之后引入了 `StringBuilder` 类,它与 `StringBuffer` 相似,但在非线程安全的环境下使用时性能更好,因为它不支持同步操作。因此,在大多数情况下,推荐使用 `StringBuilder`。 **1.3 ...
* `append(Object obj)`:将Object参数的字符串表示形式追加到StringBuilder对象中。 * `append(String str)`:将String参数的字符串表示形式追加到StringBuilder对象中。 * `append(StringBuffer sb)`:将...
理解`String`、`StringBuilder`和`StringBuffer`的特性及其方法,可以帮助开发者在Java编程中更有效地处理字符串,从而优化代码性能和内存管理。在单线程环境中,`StringBuilder`通常更高效;而在多线程环境下,为了...
在Java 5及以上版本,可以使用`+`操作符连接字符串,但在大量连接操作时,使用`StringBuilder`或`StringBuffer`更高效。 6. **常量池**: 字符串字面量会被放入常量池,如果两个字符串字面量相同,它们会指向同一...
- 使用`StringBuilder`(非线程安全)代替`StringBuffer`在非多线程环境中,以减少同步开销。 - 使用`Integer.valueOf()`缓存小整数值,避免重复创建`Integer`对象,如`Integer i = Integer.valueOf(10);` - 对于...
- 利用`StringBuilder`或`StringBuffer`的`append`方法进行字符串操作,而不是使用`+`运算符。这能避免每次拼接时创建新的`String`对象。 2. **使用final关键字**: - 使用`final`关键字声明局部变量,可以使得...
- **finalize**: Object 类中的方法,用于垃圾回收前的资源清理操作,但不保证总会被调用。 - **示例代码**: ```java final class MyClass { public final void myMethod() { System.out.println("Final method...
在Java编程语言中,`toString()`方法是一个非常重要的功能,尤其对于对象的表示和输出。该方法源自`Object`类,由于所有的Java类都隐式或显式地继承自`Object`,因此所有类的对象都可以调用`toString()`方法。这个...
在Java中,我们可以使用`java.net.URL`和`java.net.HttpURLConnection`类来发送GET请求: ```java URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con....
在Java编程语言中,`String`、`StringBuffer`和`StringBuilder`是处理字符串的三个核心类。它们各自有其特点和应用场景,尤其在多线程环境和性能方面存在显著差异。下面将详细介绍这三个类的方法及其实现,并提供...
以上就是对 Java 中 `String` 类的主要函数的总结,包括了字符串的创建、连接、获取信息、各种操作方法以及格式化和正则表达式的使用等内容。这些知识点对于日常开发非常重要,希望对你有所帮助。
- **`.equals()`**:用于比较对象的内容是否相同,通常由类自己实现,如果没有重写,则默认调用 `Object` 类中的 `equals` 方法,该方法也使用 `==` 进行比较。 - 示例:`String a = new String("foo"); String b =...
在Java编程中,字符串处理是日常工作中不可或缺的部分。...而对于日期操作,Java 8引入的`java.time`包提供了更为友好和强大的API,如`LocalDate`、`LocalTime`和`LocalDateTime`等,值得学习和使用。