为什么下面的代码在最终使用时没有抛出任何异常?
final StingBuilder sb=new StingBuilder("Satya");
sb.append("Pune");
答案 0 :(得分:3)
final
仅表示无法重新分配变量。但是变量的属性仍然可以改变
final
在这种情况下意味着:对象的引用是最终的(它只能分配一次),而不是对象本身。
对象本身仍然可以修改。
答案 1 :(得分:2)
sb.append
未向sb
分配新值,只会改变sb
已引用的实例的状态。因此,即使对于final
变量,也允许这样做。
另一方面,如果您向sb
添加了第二个作业,例如sb = null;
,则不会通过编译。
答案 2 :(得分:2)
final
意味着不变的可变性。
Java只有原始和引用变量,在这种情况下,StringBuilder sb
是引用到StringBuilder
,并且该引用是不可变的。即。你以后不能sb = null;
。
但是,引用的对象也不是不可变的,你仍然可以通过这个引用调用改变StringBuilder的方法。