Be profound be funny or be quiet .

动态

为了追赶学姐脚步!

太强了姚哥!!!

学到了

哈哈哈,有用就好?

可以,有用trollface

谢谢指正!其实你只重写equals方法用于比较两个对象是否相等的的话,就跟你说的那样,如果没有用到哈希相关的操作来处理这个对象,那么重不重写hashcode方法其实是没有影响的。但是现在的约定俗成的写法是重写equals的时候,同时将hashcode方法重写。使得在比较两个对象equals是相等的时候,用hashcode来比较可以得到相同的结果。因为你不能保证你在后面真不会用到哈希类来存储该对象,并进行操作。所以一般大家都是将两个方法重写了的。

有两个问题,第一是"对equals重新需要注意五点:" 应该是"对equals重写需要注意五点:"
第二是,"注意:无论何时覆盖equals方法,均必须同时提供一个兼容的hashCode方法。",这点我不太理解,重写equals()的同时必须提供兼容的hashCode方法吗?如果说你这个对象,不需要往哈希表结构的容器里存储的话,是不是也可以不重写hashCode方法呢?

先给出一个名词,求值策略。首先明确不管是值传递还是引用传递都是一种求值策略,越过了求值策略而去谈具体的求值方式,我觉得意义不大。求值策略是计算机科学上的一个概念,wiki是这样说的, 求值策略是确定编程语言中表达式的求值的一组(通常确定性的)规则。在了解求值策略是什么后,再谈编程语言中有没有值传递,值传递到底是什么?我觉得比较合理一些。另,任何编程语言都只是使用变量去指向内存地址,这句话我只可以理解到,在编程语言中,是怎么通过一个变量名得到变量的具体的值。我并不能看出这跟值传递有什么关系。又怎么说明了值传递不存在。关于最后一句“值传递”的概念只不过是指向了同一个内存地址,我觉得这是没有理解到值传递的本质,才会这样去理解。值传递与引用传递的本质区别在于有没有拷贝,这跟指向是否同一个内存地址并无关系。