黑马程序员技术交流社区

标题: 这个代码问题出在什么地方? 急急急!! [打印本页]

作者: wangxiaocong    时间: 2015-5-8 19:59
标题: 这个代码问题出在什么地方? 急急急!!
  1. import java.io.*;


  2. public class StringTest {

  3.         public static void isSymmetrical(String str){
  4.                 StringBuilder string1 = new StringBuilder(str);
  5.                 string1.reverse();
  6.                 boolean flag = (string1.equals(str));
  7.                 if(!flag)
  8.                         {System.out.println(str+ " is not symmetrical!");}
  9.                 else
  10.                         System.out.println(str + " is symmetrical");
  11.         }
  12.         public static void main(String[] args) throws Exception{
  13.                 /*Scanner in = new Scanner(System.in);
  14.                 String str = in.next();*/
  15.                
  16.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  17.                 String str = null;
  18.                 while((str = bufr.readLine())!= null)
  19.                 {
  20.                         if("over".equals(str))
  21.                                 break;
  22. //                        System.out.println(line);
  23.                         isSymmetrical(str);       
  24.                 }
  25.                 bufr.close();
  26.                
  27.                
  28.         }
  29. }
复制代码


输出:
asd
asd is not symmetrical!
asa
asa is not symmetrical!


但是在boolean flag = (string1.equals(str));
改为:boolean flag = ((string1.toString()).equals(str.toString()));
问题就没有了...这到底是为什么?我测试了,输入的制确实被反转了,但为什么比较出来永远是false?
作者: iverson    时间: 2015-5-8 20:07
equals比较的是他们所在的内存地址,string1是new出来的,在内存新开辟一块空间。两个字符串的地址不一样,所以才会false.你只能重写equals方法。希望能帮到你~
作者: IDhmpj    时间: 2015-5-8 20:14
string1是StringBuilder的对象,string1.equals()是继承自Object的方法,没有被重写过。相当于==,比较的是引用地址。而(string1.toString()).equals()是调用的String类的equals(),是被重写过的,比较的是内容,不是引用地址。
作者: 我干阿衰    时间: 2015-5-8 21:35
String1是new出来的StringBuilder的对象,而equals()方法是比较字符串内容的,所以String1.equals(str)返回值必定是false,而当String1.toString()时返回的是一个字符串,所以这问题就解决了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2