void foo1(string s) { s[0] = 'b'; } void foo2(string &s) { s[0] = 'b'; } int main(void) { string s1 = "hello"; string s2 = "hello"; foo1(s1); foo2(s2); // hello cout << s1 << endl; // bello,s2變量的值被修改了 cout << s2 << endl; }
static void foo(String s) { s = "java"; } public static void main(String[] args) { String s = "hello"; foo(s); // hello System.out.println(s); }
public class Integer { public static Integer valueOf(int i) { // 若是i的範圍在[low, high],則從緩存池裏獲取 if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } }
private static class IntegerCache { // 最小值不能被改變 static final int low = -128; // 最大值能夠經過-Djava.lang.Integer.IntegerCache.high來設置 // 默認值是127 static final int high; static final Integer cache[]; static { ... // 初始化high的值 ... // 初始化緩存池 cache = new Integer[(high - low) + 1]; int j = low; for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++); } ... } }
不可變對象(immutable object)在函數式編程和併發領域都會常常遇到,經過上面的對比,咱們應該就能清楚地體會到它的特色了。java