当前位置: 首页 > 知识库问答 >
问题:

String和StringBuilder,同时使用equals()[重复]

贝财
2023-03-14
String s = new String("Abc");
StringBuilder s1 = new StringBuilder("Abc");
System.out.println(s.equals(s1));  

输出:false

为什么?有人能解释一下吗?

共有2个答案

丰智
2023-03-14

Java提供了StringBuffer和String类,String类用于处理无法更改的字符串。简单地说,String类型的对象是只读且不可变的。StringBuffer类用于表示可以修改的字符。

在这种情况下,当你有:

  String s = new String("Abc");
  StringBuilder s1 = new StringBuilder("Abc");
  System.out.println(s.equals(s1));  

给出false,因为在StringBuffer类中equals方法不会像在String类中那样被重写。因此,首先需要将其转换为字符串,然后使用equals方法,如下所示:

s.equals(s1.toString()) gives `true`
唐彦
2023-03-14

一个String不是一个StringBuilder,那么为什么你期望它们是相等的呢?

s.equals(s1.toString())

将返回true,因为这将是两个Strings的比较。

字符串等于实现为:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        ...
    }
    return false;
}

对象不是字符串的实例时(并且只有字符串可以是字符串的实例,因为字符串类是最终的),等于返回false。

 类似资料:
  • 问题内容: 输出是 只是对.equals有一个简单的问题。 不管对象内容如何,仅当两个对象引用都指向同一对象时才返回true吗? 编辑 :现在我了解有关的部分,但是为什么2号线和3号线也不会返回? 编辑 :我相信看参考变量的地址,因此s1和s2不能相等。如果我的假设不正确,请纠正我 问题答案: 是,,这意味着两个对象引用不同,结果为false。 对于,您可以使用 为了进行编辑,您要在两个不同的St

  • 问题内容: 我是第一次遇到,很惊讶,因为Java已经具有一个非常强大的类,可以追加。 为什么要上第二堂课? 在哪里可以了解更多信息? 问题答案: 不允许附加。你在上调用的每个方法都会创建一个新对象并返回它。这是因为String它是不可变的-无法更改其内部状态。 另一方面是可变的。调用时,它会更改内部char数组,而不是创建新的字符串对象。 因此,拥有: 而不是,这将创建500个新的字符串对象。 请

  • 我不明白为什么system.out.println(names)在不受方法concat函数影响的情况下输出Sam,而system.out.println(names)却输出Sam4作为方法append方法的结果。为什么StringBuilder受到影响而不是String?通常情况下,对对象的引用调用方法会影响调用方,所以我不明白为什么字符串结果保持不变。提前致谢

  • 主要内容:总结在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。String 类是不可变类,即一旦一个 String 对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。 Java 提供了两个可变字符串类 StringBuffer 和 StringBuilder,中文翻译为“字符串缓冲区”。 StringBuilder 类是 JDK 1.5 新增的类,

  • 以下是输出 第1行返回,第3行返回false。 我不明白为什么编译器不认为“name1”和“sb”包含相同的值 类似地,编译器并不认为“s”和“sb”包含相同的字符串(都是非原语)。 有人能解释一下line1和line3的输出吗?

  • 本文向大家介绍JDK源码分析之String、StringBuilder和StringBuffer,包括了JDK源码分析之String、StringBuilder和StringBuffer的使用技巧和注意事项,需要的朋友参考一下 前言 本文主要介绍了关于JDK源码分析之String、StringBuilder和StringBuffer的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细