【问题标题】:String and StringBuilder difference [duplicate]String 和 StringBuilder 的区别[重复]
【发布时间】:2018-01-25 02:11:36
【问题描述】:

下面是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

【问题讨论】:

  • StringBuilder不是String类,所以不应该是equals,
  • 请注意,StringBuilder 是一个用于创建String 对象的实用程序对象,它本身不是String。这有点像将 chocolatechocolate factory 进行比较。虽然巧克力工厂生产巧克力,但它们本身并不是巧克力

标签: java string stringbuilder


【解决方案1】:

输出为false,因为您将String 对象与StringBuilder 对象进行比较。尽管sj 都包含相同的数据,但它们是不同的对象类型,因此它们永远不会“相等”。要回答true,您可以更改j,使其成为String,而不是StringBuilder

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

【讨论】:

    【解决方案2】:

    String.equals() 文档中明确说明了结果为假的原因:

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

    您将StringBuilder 对象传递给equals() 而不是String 对象,因此无论字符如何,结果都是错误的。

    StringStringBuilder 都实现了CharSequence,所以你可以使用String.contentEquals() 代替:

    boolean b = s.contentEquals(j);
    

    【讨论】:

      【解决方案3】:

      您将StringStringBuilder 进行比较。当然是false

      试试b=s.equals(j.toString()); 这应该是b true

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 在他们的例子中是StringBuilder 需要equals 吗?
        猜你喜欢
        • 2012-05-26
        • 2015-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-29
        • 2013-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多