zoukankan      html  css  js  c++  java
  • (转)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类,它不可以有子类。

  • 相关阅读:
    springCloud 服务间相互调用
    不同环境下整合相同格式的文件
    Linux 安装mysql
    利用Maven打War包引入本地Jar包
    linux服务器部署项目详细步骤
    DM数据库导入dmp文件报大小写敏感问题解决办法
    synchronized 实现过程
    TypeScript学习笔记
    @RequestMapping注解详解
    常用的Linux命令
  • 原文地址:https://www.cnblogs.com/SimonHu1993/p/7581927.html
Copyright © 2011-2022 走看看