【轉】【java】論integer是地址傳遞還是值傳遞

來源:互聯網
上載者:User

標籤:stack   his   rgs   nal   span   cond   out   tar   bsp   

轉自:http://www.tuicool.com/articles/AraaQbZ

 

論integer是地址傳遞還是值傳遞

Integer 作為傳參的時候是地址傳遞 , 可以參考如下例子,在程式剛啟動的時候把 Integer 的index 對象鎖住 ,並且調用了 wait方法,釋放了鎖的資源,等待notify,最後過了5秒鐘,等待testObject 調用notify 方法就繼續執行了。大家都知道鎖的對象和釋放的對象必須是同一個,否則會拋出  java.lang.IllegalMonitorStateException 。由此可以證明 Integer作為參數傳遞的時候是地址傳遞,而非值傳遞。

public class IntegerSyn {    public static void main(String[] args) throws InterruptedException {    Integer index = 0;    TestObject a = new TestObject(index);    synchronized (index) {      new Thread(a).start();      index.wait();    }    System.out.println("end");  }}class TestObject implements Runnable {  private Integer index;    public TestObject(Integer index){    this.index = index;  }    public void run() {    try {      TimeUnit.SECONDS.sleep(5);    } catch (InterruptedException e) {      e.printStackTrace();    }    synchronized (index) {      index.notify();    }  }}

那就會有人問了,為什麼執行如下代碼的時候兩次的輸出結果是一樣的?

public static void main(String[] args) throws InterruptedException {    Integer index = 0;    System.out.println(index);    test(index);    System.out.println(index);  }    public static void  test(Integer index){    index++;  }

理由很簡單,可以看到 Integer 類中final的value欄位,說明一旦integer類建立之後他的值就不能被修改,在 index++ 的時候Integer是建立一個新的類,所以這個第二次輸出的時候結果是一樣的!

private final int value;

【轉】【java】論integer是地址傳遞還是值傳遞

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.