<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 30, 文章 - 0, 評論 - 27, 引用 - 0
    數據加載中……

    final關鍵字到底修飾了什么

    final使得被修飾的變量"不變",但是由于對象型變量的本質是“引用”,使得“不變”也有了兩種含義:引用本身的不變,和引用指向的對象不變。

      引用本身的不變:
      final StringBuffer a=new StringBuffer("immutable");
      final StringBuffer b=new StringBuffer("not immutable");
      a=b;//編譯期錯誤

      引用指向的對象不變:
      final StringBuffer a=new StringBuffer("immutable");
      a.append(" broken!"); //編譯通過

      可見,final只對引用的“值”(也即它所指向的那個對象的內存地址)有效,它迫使引用只能指向初始指向的那個對象,改變它的指向會導致編譯期錯誤。至于它所指向的對象的變化,final是不負責的。這很類似==操作符:==操作符只負責引用的“值”相等,至于這個地址所指向的對象內容是否相等,==操作符是不管的。

      理解final問題有很重要的含義。許多程序漏洞都基于此----final只能保證引用永遠指向固定對象,不能保證那個對象的狀態不變。在多線程的操作中,一個對象會被多個線程共享或修改,一個線程對對象無意識的修改可能會導致另一個使用此對象的線程崩潰。一個錯誤的解決方法就是在此對象新建的時候把它聲明為final,意圖使得它“永遠不變”。其實那是徒勞的。


    文章來源:http://www.cnblogs.com/rodney/archive/2005/08/18/217458.html

    posted on 2008-01-17 10:06 石業海 閱讀(369) 評論(0)  編輯  收藏 所屬分類: JAVA基礎

    主站蜘蛛池模板: 亚洲一区二区三区电影| 免费人妻av无码专区| 亚洲激情在线视频| AAA日本高清在线播放免费观看| 亚洲欧洲国产成人综合在线观看 | 中文字幕无码视频手机免费看| 亚洲AV永久无码精品一百度影院 | 亚洲精品在线免费看| 亚洲网址在线观看| 国产乱子精品免费视观看片| 亚洲人成影院在线高清| 97无码免费人妻超级碰碰碰碰| 亚洲日韩亚洲另类激情文学| 国产午夜鲁丝片AV无码免费| fc2免费人成在线| 香蕉蕉亚亚洲aav综合| 免费h片在线观看网址最新| 7777久久亚洲中文字幕| 精品免费久久久久久成人影院| 国产亚洲综合一区二区三区| 国外亚洲成AV人片在线观看| 久久久久国色av免费看| 亚洲最大视频网站| 国产成人涩涩涩视频在线观看免费| jizz在线免费观看| 亚洲精品在线免费看| 国产jizzjizz免费看jizz| 国产va免费精品| 亚洲国产美女视频| 可以免费观看一级毛片黄a | 亚洲国产美女精品久久久| 亚洲男人的天堂一区二区| 最近中文字幕高清免费中文字幕mv| 亚洲熟妇无码一区二区三区| 中文字幕无码精品亚洲资源网| 91精品全国免费观看含羞草| 在线播放亚洲精品| 亚洲短视频在线观看| 亚洲日韩在线观看| 99久久久国产精品免费无卡顿| 免费一级毛片在线播放放视频 |