1. 程式人生 > >String與StringBuffer的形式引數問題

String與StringBuffer的形式引數問題

public StringBuffer append(String str):可以把任意型別資料新增到字串緩衝區裡面,並返回字串緩衝區本身

public StringBuffer insert(int offset, String str):在指定位置把任意型別的資料插入到字串緩衝區裡面,並返回字串緩衝區本身

StringBuffer與String的區別?

前者長度和內容可變,後者不可變。

如果使用前者做字串的拼接,不會浪費太多的資源。

StringBuffer -- 安全 -- 同步 -- 資料是安全的

StringBuilder -- 不安全 -- 不同步 -- 效率高一些

形式引數:

        基本型別:形式引數的改變不影響實際引數

        引用型別:形式引數的改變直接影響實際引數

注意:

        String作為引數傳遞,效果和基本型別作為引數傳遞是一樣的。


江湖上有很多關於這兩種呼叫的定義,最通常的說法是傳遞值的是值呼叫,傳遞地址的是引用呼叫。

這其實很不恰當,這種說法很容易讓我們聯想到Java的物件引數傳遞是引用呼叫,實際上,Java的物件引數傳遞仍然是值呼叫

       值呼叫:在引數傳遞過程中,形參和實參佔用了兩個完全不同的記憶體空間。形參所儲存的內容是實參儲存內容的一份拷貝。實際上,Java物件的傳遞就符合這個定義。

        引用呼叫

:在引數傳遞過程中,形參和實參完全是同一塊記憶體空間,兩者不分彼此。實際上,形參名和實參名只是程式設計中的不同符號,在程式執行過程中,記憶體中儲存的空間才是最重要的。不同的變數名並不能說明佔用的記憶體儲存空間不同。

        大體上說,兩種呼叫的根本並不在於傳遞的是值還是地址(畢竟地址也是一個值),而是在於形參和實參是否佔用同一塊記憶體空間。