final关键字如何与StringBuilder一起使用?

时间:2015-11-25 06:53:13

标签: java

为什么下面的代码在最终使用时没有抛出任何异常?
final StingBuilder sb=new StingBuilder("Satya");
sb.append("Pune");

3 个答案:

答案 0 :(得分:3)

final仅表示无法重新分配变量。但是变量的属性仍然可以改变

final在这种情况下意味着:对象的引用是最终的(它只能分配一次),而不是对象本身。

对象本身仍然可以修改。

答案 1 :(得分:2)

sb.append未向sb分配新值,只会改变sb已引用的实例的状态。因此,即使对于final变量,也允许这样做。

另一方面,如果您向sb添加了第二个作业,例如sb = null;,则不会通过编译。

答案 2 :(得分:2)

final意味着不变的可变性。

Java只有原始和引用变量,在这种情况下,StringBuilder sb引用StringBuilder,并且该引用是不可变的。即。你以后不能sb = null;

但是,引用的对象也不是不可变的,你仍然可以通过这个引用调用改变StringBuilder的方法。