新手小白 写一下我的理解 如果有错误大家指正下
对于类对象 equals方法比较的是 栈的地址 ,所以达不到比较contains方法想要达到的比较内容的目的,所以必须改写equals方法。
对于类对象 equals 与 == 如果不该写几乎是等价的。
改写程序中 首先判断两者栈地址是否相同,如果相同既为同一对象 肯定相同。
其次如输入对象为 空 ,则返回-1;由于定义比较对象时 由于构造方法的存在, 不可能为空,所以不存在空跟空的比较。
对于类对象 equals方法比较的是 栈的地址 ,所以达不到比较contains方法想要达到的比较内容的目的,所以必须改写equals方法。
对于类对象 equals 与 == 如果不该写几乎是等价的。
改写程序中 首先判断两者栈地址是否相同,如果相同既为同一对象 肯定相同。
其次如输入对象为 空 ,则返回-1;由于定义比较对象时 由于构造方法的存在, 不可能为空,所以不存在空跟空的比较。
2016-01-25
再判断二者类型是否相同 , 这样只剩下地址不同 类型相同 的对象进行比较。
再后面的判断则是结合了本实例的要求 对Course中的 name 属性进行比较。当this 里面name 为空时 如输入对象name属性也为空,则二者相同。 否则 this 的name不为空 ,由于String类中 equals的重写机制,真正的只比较内容 ,所以此处用this.name.equals(cr.name),如果相同则输出 true
再后面的判断则是结合了本实例的要求 对Course中的 name 属性进行比较。当this 里面name 为空时 如输入对象name属性也为空,则二者相同。 否则 this 的name不为空 ,由于String类中 equals的重写机制,真正的只比较内容 ,所以此处用this.name.equals(cr.name),如果相同则输出 true
2016-01-25
对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。
对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。
2016-01-25
java中的数据类型,可分为两类:
1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean
他们之间的比较,应用双等号(==),比较的是他们的值。
2.复合数据类型(类)
当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较
1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean
他们之间的比较,应用双等号(==),比较的是他们的值。
2.复合数据类型(类)
当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较
2016-01-25
最新回答 / 进击的百事可乐
用StringBuilder报错 可能是你编译器版本问题,检查下你Ecplise调用jdk的版本是不是1.5或者1.6。 还有StringBuffer和StingBuilder的区别在用前者是线程安全,一般使用StringBuilder 效率高些,在这里两者都可以用
2016-01-24
最新回答 / qq电子时代
你理解了吗 可以给我说说吗 我不理解对于List与Set而言,都是遍历一边,分别与courses2.name进行equals List不需要重写 但是Set就需要重写?这是我理解的hashcode与equals (hash比较一个域,equals比较域中一个元素.equals为true,hash一定为true;equals为false,hash不一定为false) 在此 contains先比较hash,后比较equals( hash为true,equals不一定为true;hash为fa...
2016-01-24
for(int i=str.length();i>0;i=i-3){
str.insert(i,',');
}
str.insert(i,',');
}
2016-01-24
为什么很多代码都写着不等于-1,而不应该是大于0么?大于0才表示一定找到了而且不是在首位,还有后面的等于写成".java".equals()会不会更好?
2016-01-24