摘要: public final class String implements Serializable, Comparable, CharSequence所以:1. String 一旦被创建不能被修改,因为 final2. String 不能调用 clone() 因为没有 implements CloneableString 类中含有一些对比字符串的方法,比如字典比较等等。String 的比较:1. == 用来比较是否是两个 String 是否是同一个引用。如:String s1 = "hello";String s2 = "hello";String s3 阅读全文
posted @ 2013-12-24 09:21 davesuen 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 哈希码和 equals() 都是用来比较的。1. 哈希码的作用是用来提高比较的效率。因为当比较的对象比较复杂时,equals() 可能很耗时,但哈希码只需要比较一个 int 。哈希码常用于集 (set) 中的检索。2. 规则:当我们 override 了 equals() 和 hashcode() 中的其中一个时,另一个也要重写。因为 Java 的正确规则是,如果 equals() 为真,hashcode() 必须相同,但反之可以不成立。需要尽量遵循此此规则。3. 一种合理的 hashcode() 的重写方式:public int hashcode() { int hash = 1; ... 阅读全文
posted @ 2013-12-24 08:49 davesuen 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 当我们想在系统进行垃圾回收时做一些特定的工作,我们就可以重写 finalze() 函数,因为 Object 的 此函数是空的。比如:protected void finalize() throws Throwable { try { //do something } finally { super.finalize(); }}但这种写法不是完美的,因为如果出现 Exception,finally 不会被调用。super.finalize() 将永远不会被执行。那么解决办法是,要处理 Exception,并在处理后调用 super.finali... 阅读全文
posted @ 2013-12-24 08:28 davesuen 阅读(166) 评论(0) 推荐(0) 编辑
摘要: == 用于判断是否为同一引用。比如对于 String:System.out.println("abc" == "abc"); // Output: trueSystem.out.println("abc" == "a"+"bc"); // Output: trueSystem.out.println("abc" == "Abc"); // Output: falseSystem.out.println("abc" != "de 阅读全文
posted @ 2013-12-24 08:19 davesuen 阅读(197) 评论(0) 推荐(0) 编辑
摘要: Cloning 分两类:影子克隆 shallow cloning 深度克隆 deep cloning* 调用 clone() 需要 implments Cloneable。此函数为 protected,如果在外部调用,需要把它重写为 public 的。Cloneable 接口本身其实是空的,也就是没有方法需要实现。所以 clone() 可以不重写。这种空的接口被称为 marker interface 标记接口 或 tagged interface 标签接口。1. 影子克隆是简单的克隆,对于一个对象,克隆后的对象和被克隆的对象可能有相同的属性的引用。比如:public class ... 阅读全文
posted @ 2013-12-24 08:04 davesuen 阅读(254) 评论(0) 推荐(0) 编辑
摘要: Initializer 分两类:class initializer 类初始化器 instance initializer 实例初始化器1. class initializer,在编译时运行,通过 () 函数。例:Class A { static int i; static { i = 10; }}初始化于static关键字中。2. instance initializer,在实例创建时运行,通过 () 函数,主要用于代替 constructor。Class A { double [] a; { a = new ... 阅读全文
posted @ 2013-12-24 05:39 davesuen 阅读(157) 评论(0) 推荐(0) 编辑