如何使用.equals()方法比较两个StringBuffer对象?

Pra*_*mar 0 java string tostring stringbuffer object-to-string

以下代码不起作用.任何人都可以告诉我以下代码有什么问题.逻辑上它应该工作......

package assignments;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class IsPalindrome {
public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(
                                      new InputStreamReader(System.in));
    System.out.println("Enter a Word:");
    StringBuffer sb1 = new StringBuffer(br.readLine());
    StringBuffer sb2 = new StringBuffer(sb1);
    sb1.reverse();

    if(sb2.equals(sb1))
        System.out.println("Palindrome");
    else
        System.out.println("Not a Palindrome");
}
}
Run Code Online (Sandbox Code Playgroud)

dar*_*jan 10

尝试

sb1.toString().equals(sb2.toString());
Run Code Online (Sandbox Code Playgroud)

因为StringBuffer #toString方法返回缓冲区中存储的数据的String值:

返回表示此序列中数据的字符串.分配并初始化一个新的String对象,以包含此对象当前表示的字符序列.然后返回此String.对此序列的后续更改不会影响String的内容.

  • 好吧,因为`equals`方法没有以这种方式实现`StringBuffer`s.只有当`StringBuffer`与自身共同化时,它才返回true. (2认同)

Dul*_*nga 5

在StringBuffer类中,equals方法不像在String类中那样被覆盖.在StringBuffer它只是看起来的引用是否是相同的.因此,您首先需要将其转换为String,然后使用equals方法.

所以试试吧

sb1.toString().equals(sb2.toString());
Run Code Online (Sandbox Code Playgroud)