我知道最终变量的特性。它不能从其初始化状态更改。但是当在类中使用final
变量时,StringBuffer
类的对象将使用java 中的方法进行StringBuffer
修改。append()
在StringBuffer
使用 with final 修饰符方面与其他人有何不同...
请指导我清楚地了解这一点...
final
只说不能重新分配变量。但是变量的属性还是可以改变的
一个常见的错误是假设sb
在以下示例中是一个对象。
final StringBuilder sb = new StringBuilder();
其实sb
是一个参考。无论它指的是什么对象,它都是 4 个字节(或可能是 8 个字节)。该参考不能改变。但是,引用的对象可以更改。
final
在这种情况下意味着:对对象的引用是最终的(只能分配一次),而不是对象本身。
对象本身仍然可以修改。
当您创建final
对 then 的引用时,StringBuffer
这意味着无法重新分配该引用,但您始终可以更新该引用指向的对象。
Java 中的final
关键字 is 表示不能重新分配引用该对象的变量。但这并不意味着对象本身不能改变其状态。
你的问题更适合数组对象。
final StringBuffer sb = new StringBuffer();
这sb
是最终的,您不能覆盖 sb 参考值,但与 sb 关联的对象具有某些不会改变的特性,这就是其中之一。
您已将其设为“最终”而不是“不可变”....最终意味着您无法重新分配引用并使其指向其他对象(在此上下文中)...您指向的对象的值可以更改。
例如:假设您有一个汽车对象的引用。您可以更改汽车的属性(颜色、音响系统、座椅等),但不能更改您指向的汽车。
为了防止对象的属性发生任何变化,您必须使其“不可变”。这可以通过将对象的设置器设为私有或其他方式来完成......
希望这是有道理的..