//先看看这段代码的输出是不是与想的一样,嘿嘿~
public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer("aaa");
StringBuffer sb2 = new StringBuffer("aaa");
// StringBuilder sb1 = new StringBuilder("aaa");
// StringBuilder sb2 = new StringBuilder("aaa");
System.out.println("sb1 == sb2:" + (sb1 == sb2) );
System.out.println("sb1 eq sb2:" + (sb1.equals(sb2)) );
System.out.println("sb1.capacity():" + sb1.capacity());
System.out.println("sb2.capacity():" + sb2.capacity());
System.out.println("sb1.length():" + sb1.length());
System.out.println("sb2.length():" + sb2.length());
System.out.println("sb1.toString():" + sb1.toString());
System.out.println("sb2.toString():" + sb2.toString());
}
看看java文档才发现,StringBuilder和StringBuffer都没有overriding方法:equals,原来如此!
默认的equals方法在Object中,返回 == 得到的结果。
既然sun要用StringBuilder和StringBuffer来辅助不可变的String,为何丢弃此方法呢?
看来equals方法使用时,一定要看文档,尤其是不熟悉的类,“想当然”是会犯错的~
-------------------------------------
另外文章http://www.blogjava.net/lsbwahaha/archive/2009/04/22/267038.html
写了String,StringBuffer,StringBuilder三者的区别:
Java.lang.StringBuffer
线程安全的可变字符序列。类似于 String
的字符串缓冲区,但不能修改。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从
JDK 5.0 开始,为该类增添了一个单个线程使用的等价类,即 StringBuilder
。与该类相比,通常应该优先使用 StringBuilder
类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
但是如果将 StringBuilder
的实例用于多个线程是不安全的。需要这样的同步,则建议使用 StringBuffer
。
结论:基本来说都是在性能上都是 StringBuilder
> StringBuffer
> String
------------------------------------------
代码输出:
sb1 == sb2:false
sb1 eq sb2:false
sb1.capacity():19
sb2.capacity():19
sb1.length():3
sb2.length():3
sb1.toString():aaa
sb2.toString():aaa
分享到:
相关推荐
1.1.2equals方法的作用 方法介绍 示例代码 1.2用户登录案例【应用】 1.2.1案例需求 已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示 1.2.2代码实现 public boolean ...
例如,在 Java 中,String 类的 equals() 方法是用来判断两个字符串的内容是否相同,而 Object 类中的 equals() 方法是用来判断两个对象是否是同一个对象。 toString() 方法 toString() 方法是 Object 类中的一个...
此外,包装类还支持`equals()`、`compareTo()`等比较操作,以及`hashCode()`和`clone()`等方法。 结合Builder模式,我们可以构建一个用于创建复杂对象的Builder类,其中包含对`StringBuilder`的使用,以生成包含...
相对地,StringBuilder是非线程安全的,它的方法没有进行同步处理,因此在单线程环境下,StringBuilder通常比StringBuffer有更高的性能。 二、创建对象 创建StringBuffer对象的代码如下: ```java StringBuffer sb ...
默认情况下(没有覆盖equals方法)下的equals方法都是调用Object类的equals方法,而Object的equals方法主要是用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象)。 2. int、char、long各占多少字节数...
equals方法如果字符串与other相等,则返回true。如果other为空字符串,方法将返回false。 equalsIgnoreCase方法 equalsIgnoreCase方法如果字符串与other相等(忽略大小写),则返回true。如果other为空字符串,...
StringBuffer 和 StringBuilder 类提供了一系列用于字符串操作的方法,每个 StringBuffer 和 StringBuilder 对象都是一个可以改变的 Unicode 字符序列。修改字符串对象的操作不会产生新的字符串对象。两个类的区别...
Object类中的equals方法默认比较的是对象的内存地址,而String类重写了equals方法,用于比较两个字符串的内容是否相同。当比较两个字符串对象时,如果使用==运算符,实际上是检查它们是否指向同一个内存空间;如果...
3. **方法**:尽管`StringBuilder`和`StringBuffer`在功能上大体相似,但`StringBuffer`的方法因为线程安全而进行了额外的同步处理。它们都提供了`append()`方法来拼接字符串,以及其他类似的方法如`insert()`, `...
* == 比较对象的地址,对于 Object 对象中的 equals 方法使用的也是 ==,比较的是对象的地址,默认情况下使用对象的 equals 比较地址,如果要实现自己的比较方式需要复写 equals 方法。 * equals:比较对象的值,...
* equals:equals 一般都是重写了 equals() 方法来对两个对象的内容进行比较,如果不重写,使用的就是 Object 中的 equals 方法,比较的是对象的内存地址。 在实际应用中,应该根据具体情况选择使用 == 或 equals。...
在比较引用类型的变量时,==和equals都用于比较栈内存中的地址是否相等,但通常会重写equals方法去实现对象内容的比较。 这些知识点对于Java工程师来说非常重要,掌握这些知识点可以帮助他们更好地理解Java语言的...
equals 方法和 hashCode 方法的关系是:equals 相等的对象,hashCode 也一定相等;hashCode 不等,equals 也一定不等;hashCode 相等,equals 可能相等,也可能不等。 2. 基本数据类型 Java 中的基本数据类型包括 ...
Java 作为一门流行的编程语言,其面试题涵盖了多个方面,本文将从 String 和 StringBuffer、StringBuilder 的区别、Java 的堆、栈、方法区、==、toString 方法和 equals 方法、ArrayList 和 LinkedList 的区别、...
- equals方法:是Object类中的一个方法,用于比较两个对象的内容是否相等。如果类没有覆盖equals()方法,则通过equals()比较两个对象时,等同于用“==”比较它们的引用。如果类覆盖了equals()方法,则比较的是对象...
为什么重写 equals() 时必须重写 hashCode() 方法? String String、StringBuffer、StringBuilder 的区别? String 为什么是不可变的? 字符串拼接用“+” 还是 StringBuilder? String#equals() 和 Object#equals() ...
2. == 和 equals 的区别:== 操作符用于比较两个对象的内存地址是否相同,而 equals 方法用于比较两个对象的内容是否相同。 知识点:Java 中的比较运算符、equals 方法的使用。 3. 两个对象的 hashCode() 相同,则 ...
这是因为 equals() 方法比较两个对象时,编译器会自动调用 hashCode() 方法来比较两个对象是否生成相同的整数结果。 String, StringBuilder, StringBuffer 的区别 String 保存字符串常量,每次变化都会产生一个新...
在常见的字符串操作中,判断两个字符串是否相等尤为常见,且常用的判别方式有两种,即用 String 类提供的方法 equals 和 == 运算符。 String 类提供了许多有用的方法,例如: * boolean endsWith(String suffix):...
equals方法的重写 - Object类中的equals()方法默认使用“==”运算符来比较两个对象的内存地址,这意味着除非两个对象是同一个引用,否则返回false。 - equals()方法可以通过重写来定义对象之间“相等”的含义,...