• 谈谈对final的理解


        1、final修饰类

          类不能被继承,类中的所有方法都是final的

        2、final修饰方法

          方法不能被覆盖,private修饰的方法隐性的添加了final

        3、final修饰方法内参数

          方法内的参数不会被改变,但如果是类或者引用其值可以被改变   

      public static void main(String[] args){
            StringFinal stringFinal = new StringFinal();
            StringBuffer buffer = new StringBuffer("hello");
            StringFinal.changeValue(buffer);
            System.out.println(buffer);
        }
        public static void changeValue(final StringBuffer buffer){
            //final修饰引用类型的参数,不能再让其指向其他对象,但是对其所指向的内容是可以更改的。
            //buffer = new StringBuffer("hi"); //error
            buffer.append("world");
        }
    

         输出“helloworld”

        4、final修饰变量

          final修饰变量,变量一旦被赋值,就不可被改变。如果变量被赋值为简单数值时,是可以被编译器当成常量调用。

            

    public static void main(String[] args) {
            String a = "hello2";
            final String b = "hello";
            String d = "hello";
            String c = b + 2;
            String e = d + 2;
            System.out.println((a == c));//true
            System.out.println((a == e));//false    String e = d + 2 相当于  String e = new String(d + 2)
    }

      

          如果变量被方法赋值时,也就是说被其他引用赋值时,所以,只能运行时被赋值 

    public class Test { 
        public static void main(String[] args)  { 
            String a = "hello2";   
            final String b = getHello(); 
            String c = b + 2;   
            System.out.println((a == c)); //false   此时的  String c = b + 2;相当于 String c = new String(b + 2)
    } public static String getHello() { return "hello"; } }

      

        总结,在Java里,本质是值传递,所以被final修饰后基本数据变量的值是不变的,final类所指向的引用时不会变的。

    参考:https://www.cnblogs.com/xiaoxi/p/6392154.html;

  • 相关阅读:
    发邮件
    加密解密帮助类(对称加密)
    枚举静态类
    【06月05日】A股滚动市净率PB历史新低排名
    【06月04日】A股滚动市盈率PE历史新低排名
    【06月03日】预分红股息率最高排名
    北上资金近1周流入排行榜
    最近一月研报推荐次数最多的最热股票
    【2019年05月28日】指数估值排名
    北上资金近1周流入排行榜
  • 原文地址:https://www.cnblogs.com/nicknailo/p/8796452.html
Copyright © 2020-2023  润新知