• (转)final修饰基本类型和引用类型变量的区别


    原文:http://blog.csdn.net/linhao19891124/article/details/52971045

    当使用final修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型变量不能被改变。但对于引用类型的变量而言,它保存的仅仅是一个引用,final只保证这个引用所引用的地址不会改变,即一直引用同一个对象,但这个对象完全可以发生改变。

    final int[] iArr={6,8,9,10}

    //对数组进行排序,合法

    Arrays.sort(iArr);

    System.out.println(Arrays.toString(iArr));

    //对数组元素赋值,合法

    iArr[2]=-8;

    //下面语句对iArr重新赋值,非法

    iArr=null;

    注意两种写法:

    public class Person

    {   private final Name name;

         public Person(Name name)

         {

          this.name=new Name(name.getFirstName(),name.getLastName());

         }

        

        public Name getName()

       {

         return new Name(name.getFirstName(),name.getLastName())

       ]

    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    public class Person

    {   private final Name name;

         public Person(Name name)

         {

          this.name=name;

         }

        

        public Name getName()

       {

         return name;

       ]

    }

    第二种写法:当name内容发生改变时,person也会改变,因为他们公用一个name。

    因此如果需要设计一个不可变类,必须注意引用类型的属性,如果引用类型是可变的,必须采用必要的措施保护该属性引用对象不会被修改,这样才能创建真正不可变类。

    对于一个private方法,因为它仅在当前类中可见,所以其子类无法访问该方法,就无法重写该方法========如果子类中定义一个与父类private方法有相同方法名,相同形参列表,相同返回值类型的方法,也不是方法重写,只是重新定义了一个新方法。因此

    即使用final修饰一个private访问权限的方法,依然可以在其子类中定义与该方法具有相同方法名,相同形参列表,相同返回值类型的方法。

    final类

    final修饰的类不可有子类,例如java.lang。Math类就是一个final类,它不可以有子类。

  • 相关阅读:
    hdu5894 hannnnah_j’s Biological Test(组合数取模)
    HDU5883 The Best Path(并查集+欧拉路)
    HDU5881 Tea(简单题)
    组合数取模
    codeforces703D Mishka and Interesting sum(区间偶数异或)
    upcoj2679 Binary Tree(思路题)
    upcoj2673 It Can Be Arranged(isap)
    atom编辑器适用
    python库pandas
    fabric Node SDK进行连接
  • 原文地址:https://www.cnblogs.com/SimonHu1993/p/7581927.html
Copyright © 2020-2023  润新知