首页 > 投稿 > 正文内容

Java方法传参原理详解:从内存模型到经典案例

投稿2025-05-19 14:36:15

馃 寮€绡囩伒榄傛嫹闂細涓轰粈涔堟柟娉曢噷鏀逛簡瀵硅薄锛屽闈篃璺熺潃鍙橈紵

鍒氬Java閭d細鍎匡紝鎴戠洴鐫€杩欐浠g爜鎬€鐤戜汉鐢燂細

java澶嶅埗
public static void main(String[] args) {
    Person p = new Person("鑰佺帇");
    changeName(p);
    System.out.println(p.name); // 灞呯劧鍙樻垚"鑰佸紶"浜嗭紵锛?/span>
}
void changeName(Person person) {
    person.name = "鑰佸紶";
}

涓嶆槸璇碕ava鍙湁鍊间紶閫掑悧锛熸€庝箞瀵硅薄浼犺繘鍘诲氨鑳芥敼锛熶粖澶╁挶浠氨鎺板紑鎻夌浜嗚娓呮杩欎欢浜嬶紝淇濆噯浣犵湅瀹岀洿鎷嶅ぇ鑵匡細"鍘熸潵杩欎箞鍥炰簨锛?


馃 鍐呭瓨妯″瀷璇存槑涔︼紙蹇€掑崟鍙风増锛?/h3>

鎯宠薄浣犵殑Java绋嬪簭鏄釜宸ㄥ瀷蹇€掔珯锛?/p>

  1. 鈥?strong>鈥嬪熀鏈被鍨嬧€?/strong>鈥嬪氨鍍忕幇閽烇紝鎻e厹閲岀洿鎺ヨ姳 鈫?int age = 30;
  2. 鈥?strong>鈥嬪璞$被鍨嬧€?/strong>鈥嬪儚璐甸噸鐗╁搧锛屽緱瀛樹繚闄╃ 鈫?淇濋櫓绠辩紪鍙凤紙鍐呭瓨鍦板潃锛夊啓鍦ㄥ揩閫掑崟锛堝彉閲忥級涓?/li>

涓句釜鏍楀瓙馃尠锛?/p>

java澶嶅埗
String s = "hello";  // 鍒涘缓鍖呰9锛屾嬁鍒扮紪鍙?x123
doSomething(s);      // 鎶婂啓鐫€0x123鐨勫揩閫掑崟澶嶅嵃涓€浠界粰鏂规硶

杩欐椂鍊欐柟娉曟嬁鍒扮殑鍙槸鈥?strong>鈥嬪鍗颁欢鈥?/strong>鈥嬶紒浣嗗叧閿槸鈥斺€斿鍗颁欢鍜屽師浠跺啓鐫€鍚屼竴涓繚闄╃缂栧彿鍟婏紒鎵€浠ユ柟娉曢噷鏀逛繚闄╃閲岀殑涓滆タ锛屽闈㈠綋鐒惰兘鐪嬪埌鍙樺寲鍟︼紒


馃啔 鍩烘湰绫诲瀷 vs 瀵硅薄绫诲瀷浼犲弬瀵规瘮琛?/h3>
瀵规瘮椤?/th>鍩烘湰绫诲瀷瀵硅薄绫诲瀷
浼犻€掑唴瀹?/td>鏁板€兼湰韬紙鐜伴噾锛?/td>淇濋櫓绠辩紪鍙峰鍗颁欢
鍐呭瓨浣嶇疆鏍堝唴瀛?/td>鍫嗗唴瀛?/td>
鏂规硶鍐呬慨鏀?/td>鏀圭殑鏄鍗颁欢锛屼笉褰卞搷鍘熷€?/td>閫氳繃缂栧彿鏀逛繚闄╃锛屽奖鍝嶅師鍊?/td>

涓句釜鍙嶅父璇嗘渚嬸煉★細

java澶嶅埗
void magic(int num, List list) {
    num = 100;           // 鏀瑰鍗颁欢锛堟棤鏁堬級
    list.add("surprise");// 鏀逛繚闄╃锛堢敓鏁堬級
}

杩欎釜鏂规硶璋冪敤鍚庯紝澶栬竟鐨刬nt鏁板€肩汗涓濅笉鍔紝浣哃ist閲屼細澶氬嚭涓?surprise"锛?/p>


馃挜 涓夊ぇ缁忓吀缈昏溅鐜板満

鍦烘櫙1锛氫互涓轰氦鎹㈡垚鍔熶簡鍏跺疄娌℃崲

java澶嶅埗
void swap(String a, String b) {
    String temp = a;
    a = b;
    b = temp;
}
// 璋冪敤鍚庯細x杩樻槸"鑻规灉"锛寉杩樻槸"棣欒晧"

鈿$湡鐩告椂鍒伙細鏂规硶閲屼氦鎹㈢殑鍙槸澶嶅嵃浠朵笂鐨勭紪鍙凤紝鍘熶欢蹇€掑崟鏍规湰娌″姩锛?/p>

鍦烘櫙2锛氶泦鍚堟竻绌烘儴妗?/h4>
java澶嶅埗
void clearList(List data) {
    data.clear();
}
// 璋冪敤鍚庯細杈涜嫤鏀堕泦鐨勬暟鎹叏娌′簡锛?/span>

馃洝锔忛伩鍧戞寚鍗楋細杩欑鎯呭喌搴旇浼?code>Collections.unmodifiableList(data)锛岃鏂规硶鎯虫敼涔熸敼涓嶄簡锛?/p>

鍦烘櫙3锛氭暟缁勭殑杩锋儜琛屼负

java澶嶅埗
void changeArray(int[] arr) {
    arr[0] = 99;      // 鉁?鏀逛繚闄╃閲岀殑涓滆タ
    arr = new int[3]; // 鉂?鏀瑰鍗颁欢涓婄殑缂栧彿
}
// 璋冪敤鍚庯細鍘熸暟缁勭涓€涓厓绱犲彉99锛屼絾鏁扮粍杩樻槸鍘熸潵鐨?/span>

杩欓噷鏈変釜鍐风煡璇嗭細鏁扮粍涔熸槸瀵硅薄锛佸彧涓嶈繃闀垮緱鍍忓熀鏈被鍨嬭€屽凡銆?/p>


馃洜锔?闃茬澶寸紪绋嬬绫嶏紙涓汉瀹炴垬蹇冨緱锛?/h3>
  1. 鈥?strong>鈥嬮槻寰℃€у鍒跺ぇ娉曗€?/strong>鈥嬶細

    java澶嶅埗
    public void updateUser(User user) {
        User copy = new User(user.getName()); // 鍏嬮殕涓浛韬?/span>
        // 闅忎究鎶樿吘copy瀵硅薄
    }

    鎴戝湪鐢靛晢椤圭洰閲岀敤杩欐嫑闃蹭綇浜?0%鐨勫弬鏁扮鏀归棶棰橈紝浠g爜review鏃惰缁勯暱澶哥垎鉁?/p>

  2. 鈥?strong>鈥婼tring鐨勯瓟娉曞厤鐤壒鎬р€?/strong>鈥嬶細
    寰堝鏂版墜浼氬洶鎯戜负浠€涔堟敼涓嶄簡String锛?/p>

    java澶嶅埗
    void tryChange(String s) {
        s += "!";  // 瀹為檯鍒涘缓浜嗘柊瀵硅薄锛?/span>
    }

    杩欏氨濂芥瘮鎶婂鍗颁欢涓婄殑缂栧彿鏀规垚浜嗘柊淇濋櫓绠憋紝浣嗗師蹇€掑崟杩樻槸鑰佺紪鍙峰晩锛?/p>

  3. 鈥?strong>鈥媐inal鍙傛暟鐨勯殰鐪兼硶鈥?/strong>鈥嬶細

    java澶嶅埗
    void test(final List list) {
        list.add("鍙互鐨勶紒");  // 鉁?/span>
        list = new ArrayList(); // 鉂?缂栬瘧鎶ラ敊
    }

    final鍙槸閿佹浜嗗鍗颁欢涓婄殑缂栧彿锛屼繚闄╃閲岀殑涓滆タ闅忎究鏀癸紒


馃搳 鐙棬鏁版嵁鏇濆厜

鍘诲勾甯寮焏ebug鏃剁粺璁¤繃锛屾柊鎵嬫渶甯搁亣鍒扮殑浼犲弬闂Top3锛?/p>

  1. 浠ヤ负瀵硅薄鍙傛暟鑳介噸鏂拌祴鍊硷紙78%涓嫑锛?/li>
  2. 璇垽String鍙傛暟鐨勪慨鏀规晥鏋滐紙65%韪╁潙锛?/li>
  3. 蹇借闆嗗悎鍙傛暟鐨勫壇浣滅敤锛?2%缈昏溅锛?/li>

鏈€缁濈殑鏄湁涓摜浠啓浜嗘寰幆浼犲弬浠g爜锛屾妸List浼犺繘鍘诲垹鍏冪礌锛岀粨鏋滃紩鍙?code>ConcurrentModificationException锛宒ebug浜嗕笁灏忔椂宸偣鎶婇敭鐩樼牳浜?..锛堝埆闂紝闂氨鏄垜骞茶繃绫讳技鐨勪簨馃槄锛?/p>


馃幆 缁堟瀬鐢熷瓨娉曞垯

璁颁綇杩欎釜蹇冭瘈锛?/p>

"浼犲弬灏卞儚瀵勫揩閫掞紝鍘熶欢濮嬬粓鍦ㄦ墜閲岋紝澶嶅嵃浠堕殢浣犳姌鑵撅紝浣嗘敼寰椾簡淇濋櫓绠憋紝鎹笉浜嗗揩閫掑崟锛?

涓嬫鍐嶇湅鍒版柟娉曞弬鏁帮紝鍏堝湪鑴戝瓙閲岀敾涓揩閫掑崟馃摝鈫掍繚闄╃馃敀鐨勭ず鎰忓浘锛屽寘浣犲皯璧板崄骞村集璺紒

搜索