也就是说 (如int,float等)和String类(因为该类已重写了equals和hashcode方法)对象时,默认比较的是值。而==只比较其内存地址。而对于不重写equals的对象来说,那么比较的将是对象的引用是否指向同一块内存地址同 == 一样。==也是比较其内存地址。重写之后目的是为了比较两个对象的value值是否相等。package a;class v{}public class t { public static void main(String[] args) { // TODO Auto-generated method stub String a ="123";//实例化2个对象,内容相同,指向同一块内存地址 String b = "123"; System.out.println(a.equals(b));//为true System.out.println(a == b);//为true String c =new String("123");//实例化2个对象,内容相同,指向不同内存地址 String d = new String("123"); System.out.println(c.equals(d));//为true System.out.println(c == d);//为false v w = new v();//实例化2个v类对象,未重写equals()方法,其内容一样,但内存地址不一样 v s = new v(); System.out.println(w.equals(s));//因为equals()方法的默认实现是使用"=="运算符比较2个对象的引用地址 //而不是计较对象内容,所以要想比较对象内容,要重写equals()方法; //为false System.out.println(w == s);//为false }}