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方法时,内容不都是一样的吗?请教高手指教!

解决方案 »

  1.   

    第一个我懂,c和ch都是引用,但是引用的不是同一个字符串,所以就不同了,第二个我帮你调试下
      

  2.   

    看了下API,是这么说的:
    equals
    public boolean equals(Object obj)将此对象与指定对象比较。当且仅当参数不是 null,而是一个与此对象包含相同 char 值的 Character 对象时,结果才是 true。 
      

  3.   

    ch==c:false 
    ch.equals(c):false 
    ch.equals(str):false究竟是为什么?有牛人仔细解释下吗
      

  4.   

    晕,这还要牛人解释?很简单啊!
    你的ch的类型是char[],也就是数组。数组这个类型其实就是结合了某些底层实现的Object,其大部分接口的实现和Object是一样的。所以char[]的equals()就是Object的equals(),即和==运算等价。
      

  5.   

    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
      

  6.   

    ch==c:false  都是字符数组,代表内存中2个不同地址的变量。所以不相等。
    ch.equals(c):false  字符数组无法比较。要取出里面的值,在比较。
    ch.equals(str):false 数组无法比较。
      

  7.   

    不同类型的对象,是不能equals的,一般来说
      

  8.   

    你看看这个帖子,看看应该明白了,http://topic.csdn.net/u/20071005/01/6acf83ad-3bf0-4b6f-8485-f164fd4daf63.html
      

  9.   

    谢谢大家的指点,让我学会不少:1,在object类中==和equals是一样的,比地址;2,有些类,如String改写了equals,它比的是字符串的内容;3,数组的equals是object类的,也就是==,要比较数组内容,必须取出来逐个比!
      

  10.   

    愚见:equals与==还是有区别的,一个是比较两个对象内容是否一致,一个是比较位置是否一样