黑马程序员技术交流社区
标题:
这个代码问题出在什么地方? 急急急!!
[打印本页]
作者:
wangxiaocong
时间:
2015-5-8 19:59
标题:
这个代码问题出在什么地方? 急急急!!
import java.io.*;
public class StringTest {
public static void isSymmetrical(String str){
StringBuilder string1 = new StringBuilder(str);
string1.reverse();
boolean flag = (string1.equals(str));
if(!flag)
{System.out.println(str+ " is not symmetrical!");}
else
System.out.println(str + " is symmetrical");
}
public static void main(String[] args) throws Exception{
/*Scanner in = new Scanner(System.in);
String str = in.next();*/
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
String str = null;
while((str = bufr.readLine())!= null)
{
if("over".equals(str))
break;
// System.out.println(line);
isSymmetrical(str);
}
bufr.close();
}
}
复制代码
输出:
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