以下是我试图更改最终变量值的代码.首先它打印"a"然后"ab".那么,如果我们可以改变最终变量的值那么将变量声明为final是什么好处呢?那么最终关键词的用途是什么?请任何人可以帮我这个?????
package test_new;
public class FinalVarValueChange {
public static void main(String[] args){
final StringBuffer s=new StringBuffer("a");
System.out.println("s before appending :"+s);
s.append("b");
System.out.println("s after appending :"+s);
}
}
Run Code Online (Sandbox Code Playgroud)
Bat*_*eba 19
final不强制引用引用的对象的任何程度的持久性(它与C++中的不一样const).
将变量标记为时final,表示您无法为该变量分配不同的对象引用.
例如,此代码将无法编译:
final StringBuffer s=new StringBuffer("a");
s = new StringBuffer("another a"); /*not possible to reassign to s*/
Run Code Online (Sandbox Code Playgroud)
使用Runnables,Callables和锁定惯用法时它非常有用.
StringBuffer根据它的设计是可变的,而方法append只是一种改变它内容的方法.
Java中的最终变量意味着:
对于object,这意味着您不能将另一个对象分配给此引用,但它不会阻止您调用此对象的方法.
对于基本类型变量(int,float,boolean等),因为这里没有引用和指针,以及对象方法,所以它只是意味着你不能改变变量的值.
请遵循以下准则
final ObjectA objA = new ObjectA();
Run Code Online (Sandbox Code Playgroud)
您当然可以调用此对象的方法,如下所示
objA.setXXX() //legal for a final variable objA
Run Code Online (Sandbox Code Playgroud)
setXXX()方法的副作用不受此处的final关键字控制.
但是对于以下代码
final int a = 123;
Run Code Online (Sandbox Code Playgroud)
您将无法为此变量分配任何新值,如下所示
a = 234; //Not legal if a has been defined as a final int variable.
Run Code Online (Sandbox Code Playgroud)
但是如果你使用Integer定义它,如下所示
final Integer a = new Integer(123);
Run Code Online (Sandbox Code Playgroud)
您将能够调用对象a的方法,如下所示
a.xxx()
Run Code Online (Sandbox Code Playgroud)
一般来说,对象和基本变量的最终定义是不同的.