Java之final的解析

來源:互聯網
上載者:User

標籤:

在Java中,final關鍵字可以用來修飾類、方法和變數(包括成員變數和局部變數)。

  1. 當用final修飾一個類時,表明這個類不能被繼承。
  2. 對於一個final變數,如果是基礎資料型別 (Elementary Data Type)的變數,則其數值一旦在初始化之後便不能更改;如果是參考型別的變數,則在對其初始化之後便不能再讓其指向另一個對象。
  3. final修飾的成員變數,必須在定義時或者建構函式中初始化賦值,而且一旦賦值則不能改變。
  4. 當一個變數被定義成final 類型時,在編譯時間能知道其確切的值,則被當成常量使用。

  

final String a = "hello";String b = "hello";String c = "helloworld";String d = a + "world";String e = b + "world";System.out.println(c == d);System.out.println(c == e);

 

    輸出結果:

      true

      false

  5.  final 修飾的對象內容可變,但是對象是不可變的。如:

    final MyClass myClass = new MyClass();

    myClass.i = myClass.i + 3;

    System.out.println(++myClass.i);

   輸出結果:

    4

  但是如果重新給myClass賦值則會編譯錯誤。

    myClass = new MyClass();

  6. 對於方法參數是final類型的

    

 public void testString(final String str){      str += "333";   }//編譯產生錯誤,不可重新賦值   public void testStringBuilder(final StringBuilder str){      str.append("333");}//可順利編譯執行,並輸出333

 

總結一下。我認為final所不能改變的只是引用的,而不是引用的內容。當final修飾的變數的引用地址沒有發生改變而只是值的改變則是可以的。

Java之final的解析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.