字符串逆序输出,并判断前后是否相等

package lab10_4;

/**
*

  • @author Administrator
    */
    import java.util.Scanner;
    public class Lab10_4 {

    /**

    • @param args the command line arguments
      */
      public static void main(String[] args) {
      // TODO code application logic here
      Scanner scan=new Scanner(System.in);
      System.out.print("请输入一个字符串:");

      StringBuffer s=new StringBuffer(scan.nextLine());
      System.out.print("逆序后的字符串是:");
      StringBuffer s1=new StringBuffer("");
      for( int i=s.length()-1;i>=0;--i){
      System.out.print(s.charAt(i));
      s1.append(s.charAt(i));
      }
      s1.toString();
      s.toString();
      System.out.println();
      System.out.print(s.equals(s1));

    }

}
图片说明
为什么输出的是false

哈哈哈哈,这道题还是考细致的。朋友,System.out.print(s.equals(s1)); 这里的s和s1你再仔细看看是什么类啊,虽然你s.toString();但是你s还是StringBuffer类啊
,而StringBufferl类没有实现equals的方法,所以它用的还是Object继承而来的equals()方法,当然是false了。
我想,你其实代码是想写成这样的

    String s2  =  s1.toString();
    String s3   =  s.toString();
    System.out.println();
    System.out.print(s2.equals(s3));

因为StringBuffer没有重写hashCode和equals。
所以想要比较,需要先toString,然后再比较。

因为s和s1还是StringBuffer的格式,改成String型的equals就行了

    String res1 = s1.toString();
    String res = s.toString();
    System.out.println();
    System.out.print(res.equals(res1));

或者

    System.out.print(s1.toString().equals(s.toString()));

String res1 = s1.toString();
String res = s.toString();
System.out.println();
System.out.print(res.equals(res1));

Stringbuffer两个对象并不相等图片说明

对象要比较是否相等,可以重写equal方法实现比较