java - 为什么使用 StringBuffer.reverse 后 equals() 为真?

标签 java equals reverse stringbuilder stringbuffer

p.equals(w) 总是成真。为什么?

http://ideone.com/JqLCDi

    import java.io.*;
import java.util.Scanner;

class TestClass {
    public static void main(String args[] ) throws Exception {

       Scanner s=new Scanner(System.in);
       int t=s.nextInt();
       while(t-->0){
        String k=s.next();
       StringBuffer p=new StringBuffer(k);
       int c=0;

       StringBuffer w=p.reverse();

       if(p.equals(w)){
        System.out.print(p.equals(w));

       for(int i=0;i<p.length();i++)
       {
        if(p.charAt(i)=='1'||p.charAt(i)=='0'||p.charAt(i)=='8') { c++;}
       }
       }
       if(c==p.length())System.out.println("YES");
        else System.out.println("NO");

}

    }
}

最佳答案

public synchronized StringBuffer reverse() {
super.reverse();
return this;
}

Reverse 将反转 String 并将其设置在同一个 StringBuffer 对象中。所以它总是一样的。

所以

p.reverse();

做的和说的一样

p = p.reverse();

然后如果你这样做

StringBuffer w=p.reverse();

pw 将打印到同一个对象。不用说 equals() 将返回 true

您可以在 StringBuffer 的反向操作之前和之后存储字符串对象,然后对它们使用 equals()。 toString() 返回新的字符串对象。

public synchronized String toString() {
return new String(value, 0, count);
}

关于java - 为什么使用 StringBuffer.reverse 后 equals() 为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24312853/

相关文章:

java - 调用一个方法从文件中读取数据

java - 获取ElasticsearchStatusException和ElasticsearchResponseException?

java - 方法 add(Element) 不适用于参数 (String[])

java - JSTL - 比较字符串

rust - 如何从 std::cmp::Reverse::<T> 获取 T 值

java - 为什么这个空指针异常不断出现?我最后写了错误。我还提到了发生错误的行

java - 为什么这个正则表达式不匹配

java - 为什么 Java StringLatin1.regionMatchesCI 方法在比较字符时执行 toUpperCase() 而不是 toLowerCase()?

r - 如何反转向量的顺序?

c - 在不使用指针的情况下反向打印 C 字符串?