Java 字符串和StringBuilder的区别

Java 字符串和StringBuilder的区别,java,string,stringbuilder,Java,String,Stringbuilder,以下是Java中的代码: package string; import java.util.Scanner; public class PalindromeString { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("Enter the string: "); String s=

以下是Java中的代码:

package string;

import java.util.Scanner;

public class PalindromeString 
{
    public static void main(String[] args) 
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("Enter the string: ");
        String s=sc.next();
        StringBuilder j=new StringBuilder(s).reverse();
        System.out.println(j);
        boolean b=s.equals(j);
        System.out.println(b);
        sc.close();
    }
}
输出:输入字符串:madam

j=女士

假的


为什么此代码的输出为false?

输出为
false
,因为您正在将
String
对象与
StringBuilder
对象进行比较。虽然
s
j
都包含相同的数据,但它们是不同的对象类型,因此它们永远不会“相等”。要使答案
为真
,可以将
j
更改为
字符串
,而不是
StringBuilder

String j = new StringBuilder(s).reverse().toString();

您正在将
字符串
StringBuilder
进行比较。当然是
false


尝试
b=s.equals(j.toString())
这将使
b
为true

stringBuilder不会覆盖对象的.equals()函数,这意味着两个引用不相同,结果为false。

文档中明确说明了结果为false的原因:

将此字符串与指定的对象进行比较。当且仅当参数不为null且为表示与此对象相同字符序列的字符串对象时,结果才为真

您正在将一个
StringBuilder
对象传递给
equals()
而不是
String
对象,因此结果为false,与字符无关

String
StringBuilder
都可以实现,因此您可以使用:


StringBuilder不是一个String类,所以它不应该等于,请注意,
StringBuilder
是一个实用对象,为了创建
String
对象,它本身不是
String
本身。这有点像把巧克力比作巧克力工厂。虽然巧克力工厂生产巧克力,但它们本身并不是巧克力。在他们的例子中,是不是
StringBuilder
需要
equals
boolean b = s.contentEquals(j);