1、hashCode与System.identityHashCode
默认情况下,System.identityHashCode()方法和Object.hashCode()返回的结果是一样的。
System的方法返回对象所指向的内存地址,它的返回值和是否重写hashCode方法没有关系。
String类重写了hashCode方法,重写了equals方法。
判断两个String的值是否相等,可以用equals(),也可以用compareTo()方法,只要 == 0,两个String的值就相等。
2、StringBuffer StringBuilder
对比发现,对于10万的插入,StringBuilder的速度3倍于StringBuffer。看来加不加锁对效率的影响还是很大的。
3、
JAVA几乎允许所有的双目运算符合“=”一起结合成符合赋值运算符。
实际上, a += 5 等价于 a = (a的类型) (a + 5),这就是复合赋值运算符包含的隐形转换。
4、方法重载
根据精确匹配的原则,当实际调用时传入的实参同时满足多个方法时,如果某个方法的形参要求参数范围越小,那这个方法就越精确。很明显,Object[]可看成Object的子类。
当我们无法判断哪个方法更匹配实际调用时,程序是无法通过编译的。
5、静态static
被static关键字修饰的成员(Field、方法、内部类、初始化块、内部枚举类)属于类本事,而不是单个的java对象。
当程序需要使用内部类时,应尽量考虑使用静态内部类,而不是非静态内部类。当程序使用静态内部类时,外部类相当于静态内部类的一个包。
6、异常处理流程//声明并创建Inner内部类的实例 Outer.Inner in = new Outer.Inner(); in.info();
当程序执行try块、catch块时遇到throw语句时,throw语句会导致该方法立即结束,系统执行throw语句时并不会立即抛出异常,而是去寻找异常处理流程中是否包含finally块。如果没有finally块,程序立即抛出异常;如果有finally块,系统立即开始执行finally块--只有当finally块执行完成后,系统才会再次跳回来抛出异常。如果finally块里使用return语句来结束方法,系统将不会跳回去执行try块、catch块去抛出异常。
Runtime异常是一种非常灵活的异常,它无需显式声明抛出,只要程序有需要,即可在任何有需要的地方是try...catch块来扑捉。