//==和equal()方法的区别
/*输出结果
 * str.equals(str1)true
str.equals(str2)true
str1.equals(str2)true
false
false
false
*/
public class Test1 {
public static void main(String args[]) {
String str = new String("i like java");
String str1 = new String("i like java");
String str2 = "i like java";
String str3 = "i like java"; System.out.println("str.equals(str1)"+str.equals(str1));
System.out.println("str.equals(str2)"+str.equals(str2));
System.out.println("str1.equals(str2)"+str1.equals(str2));
System.out.println("str==str1)"+str1 == str);
System.out.println("str1==str2)"+str1 == str2);
System.out.println("str3==str2)"+str3 == str2);

}
}

解决方案 »

  1.   

    本帖最后由 AWUSOFT 于 2011-03-01 23:13:09 编辑
      

  2.   

    因为+比==等级高,应该改为"str==str1)"+(str1 == str)
      

  3.   

    我也是新手不知道这样说对不对,望各位大侠指教
    equals方法被String类重写了,变为比较字符串内容是否相同了,所以输出false;
    而 == 是比较应用是否相同,当然不相同,所以输出false
      

  4.   

    上面写错了,不好意思
    equals方法被String类重写了,变为比较字符串内容是否相同了,所以输出true;
      

  5.   

    前三个都为true毫无疑问,楼主你后三个语句System.out.println("str==str1)"+str1 == str);
    是不是应该改成System.out.println(("str==str1)"+(str1 == str))就算面试会问到这种问题,应该也不会问到System.out.println("str==str1)"+str1 == str);这种情况吧,哈哈。如果就像楼主这样写的话 后三个也毫无疑问是false了
       
    如果要是像我改的那样,那最后一个是true剩下两个是false
    原因1楼已经说的很明白了
      

  6.   

    equals()比较的是内容
    str==str1的比较,你可以看作是  str.getClass()==str1.getClass()
    你自己去试试System.out.println(str.getClass());看看输出的是什么
      

  7.   

    解释一下==号,他比较的是一个对象在内存中的地址值,
    比如2个字符串对象
    String s1 = new String("str");
    String s2 = new String("str");
    如果用==号比较,会返回false,因为创建了两个对象,他们在内存中地址的位置是不一样的。equals的情况比较复杂,它是java.lang.Object类中的一个方法。因为java中所有的类都默认继承于Object,所以所有的类都有这个方法。在Object类源码中是这样写的。
    public boolean equals(Object obj) {
     return (this == obj);
    }
    他同样使用==号进行内存地址的比较。但是许多java类中都重写了这个方法,比如String。
    public boolean equals(Object anObject) {
     if (this == anObject) {
      return true;
     }
     if (anObject instanceof String) {
      String anotherString = (String)anObject;
      int n = count;
      if (n == anotherString.count) {
      char v1[] = value;
      char v2[] = anotherString.value;
      int i = offset;
      int j = anotherString.offset;
      while (n-- != 0) {
      if (v1[i++] != v2[j++])
      return false;
      }
      return true;
      }
     }
     return false;
      }String里的方法,如果==号比较不相等,还会进行一下值的比较。
    所以equals方法具体的作用要看当前的那个类是如何实现重写父类中该方法的。如果没有重写该方法,那么他和==号等价。
      

  8.   

    Java中,“==”的语义是固定的,就是比较变量的“值(value)”
    int i = 1;
    int j = 1;
    i == j 为true,因为值相同。Integer i = new Integer(1);
    Integer j = new Integer(1);
    i == j 为false,因为i和j的值不同。所需要区分的是,基本类型变量的值和引用类型变量的值是什么含义。认识到引用变量的值和对象的不同,也就理解了。
    或许这里讲的更详细一点http://wenku.baidu.com/view/2d25e10d4a7302768e9939d7.htmlhttp://www.360doc.com/content/10/0829/15/2305723_49651719.shtmlhttp://devilcy.javaeye.com/blog/786678希望对你有帮助