This Java tutorial 表示不可變對象在創建後無法更改其狀態。調用java.lang.String不可變是否正確?
java.lang.String
有一個字段
/** Cache the hash code for the string */
private int hash; // Default to 0
這是對hashCode()
方法的第一次調用初始化,因此創建後它的變化:
String s = new String(new char[] {' '});
Field hash = s.getClass().getDeclaredField("hash");
hash.setAccessible(true);
System.out.println(hash.get(s));
s.hashCode();
System.out.println(hash.get(s));
輸出
0
32
是它正確呼叫String
不可變?
反射黑客不計算不可變性。 – Perception 2013-03-07 15:44:21
http://stackoverflow.com/q/11146255/758280 – Jeffrey 2013-03-07 15:45:42
正如@Perception所說,反射攻擊不應該算在內。將散列值緩存在專用字段中不會影響任何非私有方法或狀態。 – 2013-03-07 15:47:00