zoukankan      html  css  js  c++  java
  • java关键字之final

       

     在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。final修饰变量较为常用。

    当用final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值。

    【修饰变量】:
         final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
    【修饰方法】:
         final方法不能被子类方法覆盖,但可以被继承。
    【修饰类】:
         final类不能被继承,没有子类,final类中所有方法都是final的。(如String类)


    那么final变量和普通变量到底有何区别呢?下面请看一个例子:

    public class Test {
        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));
            System.out.println((a == e));
        }
    }

    运行结果:

    ture
    false

    当final修饰基本数据类型或String时,如果在编译期间能够知道变量的确切值,那么编译器会把它当作编译期常量(即相当于在任何使用final变量的地方直接使用常量),不用等到运行时确定。所以变量c在便宜期间相当于"hello2"。而变量d要等到运行时通过链接确定值。不过要注意,只有在编译期间能确切知道final变量值的情况下,编译器才会进行这样的优化。

    参考:http://www.cnblogs.com/hwaggLee/p/4491474.htm

  • 相关阅读:
    java字符串类型——String
    Arrays.asList(String[]).add(String) 报错
    Bigdecimal除法异常
    java使用AES-256-ECB(PKCS7Padding)解密——微信支付退款通知接口指定解密方式
    centos安装rocketMQ
    拦截器中获取不到controller注解问题
    springboot接收date类型参数
    mybatis
    mybatis generator对于同一个表生成多次代码的问题
    抓包工具之MitmProxy
  • 原文地址:https://www.cnblogs.com/liweizai/p/6536191.html
Copyright © 2011-2022 走看看