首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

==跟equals的理解

2012-08-28 
和equals的理解Value value new Value()Value value2 new Value()value.i value2.i 100//equ

==和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()方法

热点排行