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));
对象要比较是否相等,可以重写equal方法实现比较