我们可以更改可变类的最终变量的值吗?

2022-09-04 05:52:47

下面是一个代码,我试图更改最终变量的值。首先,它打印“a”,然后打印“ab”。那么,如果我们可以更改最终变量的值,那么将变量声明为最终变量有什么好处呢?那么最终关键词的用法是什么呢?请任何人都可以帮助我?????

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);     
   }
}

答案 1

final不强制引用所引用的对象具有任何程度的恒定性(它与C++不同)。const

将变量标记为 时,这意味着不能为该变量分配不同的对象引用。final

例如,此代码不会编译:

final StringBuffer s=new StringBuffer("a");
s = new StringBuffer("another a"); /*not possible to reassign to s*/

当使用 Runnables、Callables 和锁定习语时,它可能很有用。


答案 2

StringBuffer根据其设计是可变的,而方法追加只是一种更改其内容的方法。

Java 中的最后一个变量的含义是:

  • 对于 object,这意味着您不能将另一个对象分配给此引用,但它不会阻止您调用此对象的方法

  • 对于基本类型变量(int,float,布尔值等),由于这里没有引用和指针以及对象方法,因此它只是意味着您无法更改变量的值。

获取以下代码

final ObjectA objA = new ObjectA();

当然,您可以调用此对象的方法,如下所示

objA.setXXX() //legal for a final variable objA

setXXX() 方法的副作用在这里不受 final 关键字的控制。

但对于以下代码

final int a = 123;

您将无法为此变量分配任何新值,如下所示

a = 234; //Not legal if a has been defined as a final int variable.

但是,如果您使用整数定义它,如下所示

final Integer a = new Integer(123);

您将能够调用对象a的方法,如下所示

a.xxx()

一般来说,对象和基本变量的最终定义是不同的。


推荐