Android面試集錦系列(32)——Java的值傳遞和引用傳遞問題
自2010年起,Google和甲骨文一直就Android系統是否侵犯甲骨文的版權和專利爭論不休。其實雙方的爭論點倒不是Google是否在 Android 中使用了Java APIs,Google對此也沒有否定,因為這樣能讓數百萬的開發者為自己開發應用程式。Google的論點是,APIs不能有版權,它本來就是用來讓應用程式間相互交流,而很多公司也會讓開發者自由使用。甲骨文對此的態度當然是我不聽、我不聽、我不聽。
最終聯邦陪審團裁定Android作業系統並未侵犯甲骨文的版本,37個Java API是正常使用。Android程式設計師開始噴甲骨文,並慶幸我們的飯碗保住了。
回到面試上,今天聊一下和Java相關的面試題。沒錯總有那麼一些公司在招Android程式設計師時,比較側重考察Java基礎和能力的。Java的值傳遞和引用傳遞問題,相信很多人都被問題過,當然很多時候面試官都不會這麼直白的問,他們會給你設計一個方法讓你給出執行這個方法後的輸出結果。
面試題: Java的值傳遞和引用傳遞問題
看過一些Java教材的話,對這句話應該不陌生:
“在Java裡面引數傳遞都是按值傳遞”
這句話的意思是:按值傳遞是傳遞的值的拷貝,按引用傳遞其實傳遞的是引用的地址值,所以統稱按值傳遞。
簡單的說,基本型別是按值傳遞的,方法的實參是一個原值的複本。類物件是按物件的引用地址(記憶體地址)傳遞地址的值,那麼在方法內對這個物件進行修改是會直接反應在原物件上的(或者說這兩個引用指向同一記憶體地址)。不過要注意String這個型別,如下程式碼:
public static void main(String[] args) { String x = new String("goeasyway"); change(x); System.out.println(x); } public static void change(String x) { x = "even"; }
可以自己思考一下會輸出什麼結果,為什麼。String的物件是不可修改的,如果真正要達到改變字串的效果,我們需要使用StringBuilder來替代String。
結論
很遺憾,我在實際中發現很多人都不會去重視基礎問題,保括一些資深的開發也不太清楚Java還有這兩種區分。在之前我呆過的一家公司,有一位女程式設計師直接在程式碼裡使用一個未經宣告的方法,並給這個方法傳引數,然後來問我為什麼編譯不過呢。但這卻不妨礙她仍然可以為客戶解決問題,可以獲得組內的最佳員工評選。所以有很多人並不重視基礎的問題,總認為不知道也無防,用的時候有問題自然會報出來,到時候再解決就好了,你知道的也沒比我多能耐。我只能說,知道的話確實不比別人多能耐,只是多了一份從容。
最後
在現在這個金三銀四的面試季,我自己在網上也蒐集了很多資料做成了文件和架構視訊資料免費分享給大家【 包括高階UI、效能優化、架構師課程、NDK、Kotlin、混合式開發(ReactNative+Weex)、Flutter等架構技術資料 】,希望能幫助到您面試前的複習且找到一個好的工作,也節省大家在網上搜索資料的時間來學習。
資料獲取方式:加入Android架構交流QQ群聊:513088520 ,進群即領取資料!!!
點選連結加入群聊【Android移動架構總群】:加入群聊

資料大全