Java之final的解析

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

  1. 当用final修饰一个类时,表明这个类不能被继承。
  2. 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
  3. final修饰的成员变量,必须在定义时或者构造函数中初始化赋值,而且一旦赋值则不能改变。
  4. 当一个变量被定义成final 类型时,在编译时能知道其确切的值,则被当成常量使用。

  

final String a = "hello";
String b = "hello";
String c = "helloworld";
String d = a + "world";
String e = b + "world";
System.out.println(c == d);
System.out.println(c == e);

 

    输出结果:

      true

      false

  5.  final 修饰的对象内容可变,但是对象是不可变的。如:

    final MyClass myClass = new MyClass();

    myClass.i = myClass.i + 3;

    System.out.println(++myClass.i);

   输出结果:

    4

  但是如果重新给myClass赋值则会编译错误。

    myClass = new MyClass();

  6. 对于方法参数是final类型的

    

 public void testString(final String str){

      str += "333";

   }//编译产生错误,不可重新赋值

   public void testStringBuilder(final StringBuilder str){

      str.append("333");

}//可顺利编译执行,并输出333

 

总结一下。我认为final所不能改变的只是引用的,而不是引用的内容。当final修饰的变量的引用地址没有发生改变而只是值的改变则是可以的。

posted @ 2015-07-12 22:16  woniu4  阅读(171)  评论(0编辑  收藏  举报