Menu
快讀
  • 旅遊
  • 生活
    • 美食
    • 寵物
    • 養生
    • 親子
  • 娛樂
    • 動漫
  • 時尚
  • 社會
  • 探索
  • 故事
  • 科技
  • 軍事
  • 国际
快讀

一篇《Java參數傳遞》面試題解析

2021 年 3 月 11 日 拉里气气

(此處已添加小程序,請到今日頭條客戶端查看)

首先回答:在Java中參數的傳遞是按值傳遞的。按值傳遞的意思實際上就是傳遞的是變量的一個副本。既然是副本,那麽在傳遞的那個方法中對這個副本的修改,並不影響那個變量。

然後開始用例子說明:

public static void main(String[] args) { int x = 1; System.out.println(“main()調用test前x=”+x); test(x); System.out.println(“main()調用test前x=”+x); } private static void test(int x) { x*=3; System.out.println(“test()中x=”+x); }

1)x是基本類型的局部變量,所以它存放在棧中

2)x作爲參數傳遞給test,其實傳遞的是x的一個副本

3)既然是副本,那麽test方法中對x的修改並不影響main中的。

一篇《Java參數傳遞》面試題解析

例2:

public static void main(String[] args) { P p1 = new P(23); P p2 = new P(33); System.out.println(“main()調用test前p1的age=”+p1.getAge()); System.out.println(“main()調用test前p2的age=”+p2.getAge()); test(p1,p2); System.out.println(“main()調用test前p1的age=”+p1.getAge()); System.out.println(“main()調用test前p2的age=”+p2.getAge()); } private static void test(P p1,P p2) { P tmp = p1; p1 = p2; p2 = p1; }

1)p1作爲引用類型的局部變量,存放在棧中。

2)p2作爲引用類型的局部變量,存放在棧中。

3)p1和p2作爲參數傳遞給test,其實是傳遞的p1的副本和p2的副本。

4)既然是副本,那麽在test中的改變並不影響main中的p1和p2

5)從堆棧上可以看出:你堆test中的p1和p2進行交換,並不能影響到main中的p1和p2

一篇《Java參數傳遞》面試題解析

例3:

public static void main(String[] args) { P p1 = new P(23); System.out.println(“main()調用test前p1的age=”+p1.getAge()); test(p1); System.out.println(“main()調用test前p1的age=”+p1.getAge()); } private static void test(P p1) { p1.setAge(99); }

1)main中的p1和test中的p1都是指向同一個對象。

2)test中修改的只是對象中的屬性值,並不是修改p1本身。

3)從堆棧圖上可以看出:

一篇《Java參數傳遞》面試題解析

(此處已添加小程序,請到今日頭條客戶端查看)

相關文章:

  • 這些看起來很貴重的珠寶,其實根本就不值錢!千萬不要被坑了
  • “丟失”的國寶:這十大傳世孤品都在日本!還能回來嗎
  • 古代銀子真實的樣子!別再讓電視劇給騙了,網友:文物送我都不要
  • 法國的這個博物館,竟藏有兩萬件中國文物
  • 這幾位名人,家喻戶曉
  • 馬未都:一根拐杖就讓我看清了馮小剛的爲人!
故事

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

©2025 快讀 | 服務協議 | DMCA | 聯繫我們