Java 解惑知多少七
应用
47. 不可变的引用类型
BigInteger total = BigInteger.ZERO; total.add(new BigInteger("1")); total.add(new BigInteger("10")); System.out.println(total);//0
BigInteger total = BigInteger.ZERO; total=total.add(new BigInteger("1")); total=total.add(new BigInteger("10")); System.out.println(total);//11
class T { private String str; T(String str) { this.str = str; } public boolean equals(Object obj) { if(!(obj instanceof T)){ return false; } T t = (T)obj; return t.equals(this.str); } public static void main(String[] args) { Set set = new HashSet(); set.add(new T("str")); System.out.println(set.contains(new T("str")));//false } }
public int hashCode() { return 37 * this.str.hashCode(); }
Calendar c = Calendar.getInstance(); c.set(2010, 12, 31);// 月是从0开始的,11其实表示12月 System.out.println(c.get(Calendar.YEAR) + " " + c.get(Calendar.MONTH)); c = Calendar.getInstance(); c.set(2010, 11, 31); System.out.println(c.get(Calendar.YEAR) + " " + c.get(Calendar.MONTH));
class T { private String str; T(String str) { this.str = str; } public int hashCode() { return 37 * this.str.hashCode(); } public boolean equals(Object obj) { return this.str.equals(((T) obj).str); } public static void put(Map m) { m.put("str", "1"); /* * 由于上面程序将 "str" 放入了字符串常量池, * 所以str是同一个对象,不管是什么样类型的 * Map,即使使用IdentityHashMap都只放入一次 */ m.put("str", "2"); m.put(new T("str"), "3"); m.put(new T("str"), "4"); } public static void main(String[] args) { Map m = new HashMap(); put(m); System.out.println(m.size());// 2 (2,4) //IdentityHashMap比较时使用==替换equals()方法 m = new IdentityHashMap(); put(m); System.out.println(m.size());// 3 (2 3 4) } }
public static void main(String[] args) { String str = "Hello World"; for (int i = 0; i < str.length(); i++) { System.out.write(str.charAt(i)); } }
class Dog implements Serializable{ public static final Dog INSTANCE = new Dog(); private Dog(){} }
class Dog implements Serializable { public static final Dog INSTANCE = new Dog(); private Dog() {} private Object readResolve() { return INSTANCE; } } public class SerialDog { public static void main(String[] args) throws IOException, ClassNotFoundException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); new ObjectOutputStream(bos).writeObject(Dog.INSTANCE); ByteArrayInputStream bin = new ByteArrayInputStream(bos.toByteArray()); Dog dog = (Dog) new ObjectInputStream(bin).readObject(); System.out.println(dog == Dog.INSTANCE);//true } }
public class SelfInerruption { public static void main(String[] args) { Thread.currentThread().interrupt(); if (Thread.interrupted()) { // Interruped:false System.out.println("Interruped:" + Thread.interrupted()); } else { System.out.println("Not interruped:" + Thread.interrupted()); } } }