String與StringBuffer的形式引數問題
public StringBuffer append(String str):可以把任意型別資料新增到字串緩衝區裡面,並返回字串緩衝區本身
public StringBuffer insert(int offset, String str):在指定位置把任意型別的資料插入到字串緩衝區裡面,並返回字串緩衝區本身
StringBuffer與String的區別?
前者長度和內容可變,後者不可變。
如果使用前者做字串的拼接,不會浪費太多的資源。
StringBuffer -- 安全 -- 同步 -- 資料是安全的
StringBuilder -- 不安全 -- 不同步 -- 效率高一些
形式引數:
基本型別:形式引數的改變不影響實際引數
引用型別:形式引數的改變直接影響實際引數
注意:
String作為引數傳遞,效果和基本型別作為引數傳遞是一樣的。
江湖上有很多關於這兩種呼叫的定義,最通常的說法是傳遞值的是值呼叫,傳遞地址的是引用呼叫。
這其實很不恰當,這種說法很容易讓我們聯想到Java的物件引數傳遞是引用呼叫,實際上,Java的物件引數傳遞仍然是值呼叫。
值呼叫:在引數傳遞過程中,形參和實參佔用了兩個完全不同的記憶體空間。形參所儲存的內容是實參儲存內容的一份拷貝。實際上,Java物件的傳遞就符合這個定義。
引用呼叫
大體上說,兩種呼叫的根本並不在於傳遞的是值還是地址(畢竟地址也是一個值),而是在於形參和實參是否佔用同一塊記憶體空間。