==和equals的理解
Value value = new Value(); Value value2 = new Value(); value.i = value2.i = 100; //equals()方法默认是比较对象内存地址的引用,如果需要比较两个对象的值是否相同, //需要新类重写equals()方法 System.out.println(value.equals(value2));//false String str = new String(); String str1 = new String(); str = "string"; str1 = "string"; /** * (我的理解) * String str = new String();在内存中创建以str对象,并为其在堆中分配空间 * String str1 = new String();在内存中创建以str1对象,并为其在堆中分配空间 * str = "string";在堆中产生一个值为“string”的对象,str指向这个对象 * str1 = "string";str1也指向这个对象 * 因此str和str1的引用地址相同 * 疑问: * str = "string"; * str1 = "string"; * 这里应该在堆中产生两个值为“string”的对象,并为其在堆中分配空间 * 那str和str1的引用地址就不相同。为什么在堆中只产生一个值为“string”的对象??? */ System.out.println(str.equals(str1));//true System.out.println(str == str1);//true /** * 只有用new了,才在堆中分配空间,创建对象 * String str2 = new String("string1"); * String str3 = new String("string1"); * 虽然值是一样的,但是在堆中存在两个对象,因此str2和str3的引用地址不相同 */ String str2 = new String("string1"); String str3 = new String("string1"); //比较对象的引用 System.out.println(str2 == str3);//false //比较对象的值,String重写了equals() System.out.println(str2.equals(str3));//true String str4; String str5; str4 = "string"; str5 = "string"; System.out.println(str4 == str5);//true System.out.println(str4.equals(str5));//true?
1 楼 08284008 2012-05-18 java的大多数类都重写了equals()方法