覆盖hashCode()的一种参考方法

最后修改于: 2016-04-19 18:15:05.0

编写一个类的时候,覆盖equals方法的同时也要覆盖hashCode,这是常识。覆盖equals比较简单,如基本类型直接比较,引用类型则递归调用equals即可。覆盖hashCode则不那么简单。

一个好的散列函数应该为相等的对象始终产生相等的散列值,并倾向于为不相等的对象产生不相等的散列值,散列冲突是不可避免的,但是好的散列函数应该尽力避免这一点。

《Effective Java》中给出了一种覆盖hashCode的方法:

1、把一个非零常数,比如17,保存在一个int类型的变量result中。

2、对于对象中的每个关键域f,进行以下操作:

字段与方法的多态区别

最后修改于: 2016-03-31 23:00:16.0

虽然多态在oo编程里面是再基础不过的东西,不过未必能完全把细节说清楚,比如今天在知乎看到一个问题,下面这段代码的结果是什么?那个display写成diplay是题主就这么写的,不是我的锅

public class Test {
    public static void main(String[] args) {
        P b = new B();
        System.out.println(b.a);
    }

    static class P 

从字节码解释初始化块的行为

最后修改于: 2016-03-31 21:06:59.0

先看一段代码:

public class Solution {  
    public static Solution ss = new Solution();
    {
        System.out.println("A");
    }
    static{
        System.out.println("B");
 &

正则表达式总结

最后修改于: 2016-02-26 23:52:55.0

对于一些在字符串规则和正则表达式规则中都存在的转义,比如\t\n来说,Pattern.compile("\\n")或者Pattern.compile("\n")都是可以的,如果是前者,则会字符串转义为\n再又正则表达式转义为换行,而后者由字符串转义为换行,然后正则表达式处理时就直接处理为换行。

但是对于只在正则表达式中存在的转义比如\d,就只能写Pattern.compile("\\d")而不能写Pattern.compile("\d"),因为后者在字符串转义时会报错。


子类调用父类方法时关于“this”的问题

最后修改于: 2016-02-26 23:42:37.0

先看代码:

class Father2 {
	void Method1() {
		System.out.println("fm1");
	}

	void Method2(int n) {
		for (int i = 0; i < n; i++) {
			Method1();
		}
		System.out.println("fm2");
	}
}

class Son extends Father2 {
	int count = 0;

	void Method1() {
		count++;
		super.Method1();
	}

	void Met

关于我

男,1991年末出生,这个人很懒,其他的不想写了。
More about me

文章分类

其他玩意儿