Re: [問題] 兩個基礎問題 (可能C用久了)

看板java作者 (say)時間13年前 (2013/02/26 00:41), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《nosrep (真相)》之銘言: : JAVA如何做到... : 1. function參數, 如果希望修改基本型態的參數值時,能夠改變到呼叫者的變數. : 會用什麼方式處理? : 例如: void get_size(int s) { s = 3; // get some size } : 要用 Integer 物件包起來傳嗎..? Integer 也沒辦法,因為它被設計為 immutable。 要麼自己寫 mutable 版本的 Integer, 要麼就利用回傳值。 : 2. C語言可以很容易將陣列的某個位置之後傳給某函釋處理.那JAVA要怎麼寫呢.. : 例如C語言範例: : // void process_array(char *array) : char array[32]; : process_array(array + 12); //從array第12個位置之後開始處理. 沒辦法,替代方案如下 1. 自己多傳個 startIndex 2. 自己複製好陣列傳進去 3. 使用 String 或 List 代替 char array, 這樣就有 substring() 或 subList() 可用了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.78.231

02/26 08:41, , 1F
讚~高手, 不過第二個看起來後面兩者效率都不高~只能選一
02/26 08:41, 1F

02/26 10:31, , 2F
第一個解決方法也可以用陣列的方式傳
02/26 10:31, 2F
第三個方法的效率並不會差多少, 建議看 sbrhsieh 的這篇 #1BI48HoN , 雖然那篇所提的內容遠比我這裡想要說明的更多 :) 簡單的說,substring() 所建立的 String 物件, 其內部的 char array 實體會與原始 String 共用, 而且因為 Immutable 的設計,你也不需要擔心內容有機會被竄改。 subList 也有類似處理,回傳的只是原始 List 中的一部分 "view"。 ※ 編輯: tkcn 來自: 140.114.78.231 (02/26 21:55)
文章代碼(AID): #1HAvH8Ae (java)
文章代碼(AID): #1HAvH8Ae (java)