日期:2014-05-20  浏览次数:20655 次

请教toCharArray()函数
public class StringChar {

public static void main(String args[]){

String str="hello";
char c[]={'h','e','l','l','o'};

char ch[]=str.toCharArray();

System.out.print("c:");
System.out.println(c);
System.out.print("ch:");
System.out.println(ch);

//ch, c 之间的比较
if(ch==c)
System.out.println("ch==c:true");
else
System.out.println("ch==c:false");
if(ch.equals(c))
System.out.println("ch.equals(c):true");
else
System.out.println("ch.equals(c):false");

//ch,s之间的比较
if(ch.equals(str))
System.out.println("ch.equals(str):true");
else
System.out.println("ch.equals(str):false");

}

}
输出:
c:hello
ch:hello
ch==c:false
ch.equals(c):false
ch.equals(str):false


这是我写的一个程序,请高手请教,为什么结果都是false;尤其不懂的是比较equals方法时,内容不都是一样的吗?请教高手指教!


------解决方案--------------------
晕,这还要牛人解释?很简单啊!
你的ch的类型是char[],也就是数组。数组这个类型其实就是结合了某些底层实现的Object,其大部分接口的实现和Object是一样的。所以char[]的equals()就是Object的equals(),即和==运算等价。
------解决方案--------------------
ch.equals(c)的时候是比较前后是否是同一个对象.
java.lang.object中的方法如下:
public boolean equals(Object object_0_) {
return this == object_0_;
}
也就是ch.equals(c)和ch == c 是相同的.
ch.equals(str)这个调用的也是object中的equals方法,所以同上.

而String中的eqauls是比较两个字符串是否相等.
String s1 = "hello";
String s2 = "hello";
s1.equals(s2);//true


------解决方案--------------------
ch==c:false 都是字符数组,代表内存中2个不同地址的变量。所以不相等。
ch.equals(c):false 字符数组无法比较。要取出里面的值,在比较。
ch.equals(str):false 数组无法比较。
------解决方案--------------------
你看看这个帖子,看看应该明白了,http://topic.csdn.net/u/20071005/01/6acf83ad-3bf0-4b6f-8485-f164fd4daf63.html
------解决方案--------------------
数组名代表的是数组的首地址
不同的数组地址肯定不同了