"=="是比较两个句柄的值的(即指针或内存地址(基本类型除外))
"equals"是比较两个对象的值(即指针指向的内容)class EqualsTest {
    public static void main(String[] arguments) {
        String str1, str2;
        str1 = "Free the bound periodicals.";
        str2 = str1; //句柄赋值,句柄相同,指向也相同        System.out.println("String1: " + str1);
        System.out.println("String2: " + str2);
        System.out.println("Same object? " + (str1 == str2)); //句柄相等        str2 = new String(str1); //新生成一个句柄(str2与str1句柄不一样,但指向一样,都是指向str1所指向的对象)        System.out.println("String1: " + str1);
        System.out.println("String2: " + str2);
        System.out.println("Same object? " + (str1 == str2)); //句柄不同
        System.out.println("Same value? " + str1.equals(str2)); //指向相同
    }
}

解决方案 »

  1.   

    "=="是java中固定的操作符,用来判断是否相等,用法比较单一
    由于在java中除了基础类型(int,char,boolean等)其它都是对象,而用"=="来比较对象实际上就是在比较对象的句柄(也可以说是地址的比较),因此即使对象的内容是一样的用"=="判断也是不一样的
    (除非:Object a =new Object()
           Ojbect b = a;
           if(a==b)
              System.out.println("true");
     在上述这个程序的情况下执行结果是打印出“true”)。
    而equals()方法在Java中所有的对象都具有的,由于Java中的所有类都extends Object,所以个各类都可能对equals()方法重写(面向对象多态性的体现),因此equals()方法虽说也是比较两个对象,但由于各个类中的实现方法不一样,从而其比较的内容也不一样,就像楼上说的String 对象的equals()是用来比较字符串对象所包含的字符串值是否相等。
    结论:==的用法比较单一,是一个固有的操作符
        equals()方法是一个可以根据需要来比较两个对象的某些特征是否相等,用途很广