• final 变量


    一。final对象

    使用final关键字修饰一个变量时,是指引用不能变,引用的对象中的内容还是可以改变的。例如,对于如下语句:

     final StringBuffer a=new StringBuffer("immutable");
    
     // a=new StringBuffer(""); //编译出错 
    
     a.append(" broken!");  // 可以 

    传入final参数不能阻止方法内部修改传进来的参数对象:

    public void method(final  StringBuffer  param){
    
      param.append("a");
    
    }

    3.数组也是对象

    final int[] count=new int[1];  //count[0] = 9; count[0] = 100 都可以 

    综上:栈上的内容不能修改,但堆上的内容可以修改。

    数组元素是存在堆中的,但是直接给一个变量赋值, 是在栈中直接对变量赋值,数组是从栈中向堆中引用。我画不了图,╮(╯▽╰)╭ ,

    简单的说,数组是两部分组成的,栈中定义的是变量和引用,然后数组又有0、1、2、……,对应着数组中的元素,所以final定义的数组,

    数组里面的值就能改,而final定义的直接给一个变量赋值就不能改。

     

     二。final 基本类型

    public class Something {
        public int addOne(final int x) {
              return ++x; //出错 。 x 被修饰成final
         }
    }

    三。内部类使用的外部变量

         

    应该是生命周期的原因,因为方法内定义的变量是局部变量,离开该方法,变量就失去了作用,而内部类却不会离开它所在方法就失去作用,它有更广的生命周期。

       

  • 相关阅读:
    锁,你知多少呢?
    成长于我
    js write google广告
    项目三边六拍
    IT新人培养计划
    网站变灰色 代码
    职业人生
    ASP.NET 4 新特性之一二
    .net 例子
    A Better sp_who2 using DMVs (sp_who3)
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/3836700.html
Copyright © 2020-2023  润新知