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

字符串和StringBuilder的差异[重复]

罗华翰
2023-03-14

以下是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();
    }
}

输出:输入字符串:夫人

J=女士

错误的

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

共有3个答案

乌鸿宝
2023-03-14

您正在将字符串StringBuilder进行比较。当然,这将是错误

尝试b=s.equals(j.toString());这应该使btrue

雷锋
2023-03-14

结果为false的原因在String.equals()留档中有明确说明:

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

您正在将一个StringBuilder对象传递给equals()而不是String对象,因此无论字符如何,结果都是false。

StringStringBuilder都实现了CharSequence,因此可以使用String。contentEquals()

boolean b = s.contentEquals(j);
蓟辰沛
2023-03-14

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

String j = new StringBuilder(s).reverse().toString();
 类似资料: