3

我知道最终变量的特性。它不能从其初始化状态更改。但是当在类中使用final变量时,StringBuffer类的对象将使用java 中的方法进行StringBuffer修改。append()

StringBuffer使用 with final 修饰符方面与其他人有何不同...

请指导我清楚地了解这一点...

4

7 回答 7

12

final只说不能重新分配变量。但是变量的属性还是可以改变的

于 2013-09-17T09:23:04.460 回答
5

一个常见的错误是假设sb在以下示例中是一个对象。

final StringBuilder sb = new StringBuilder();

其实sb是一个参考。无论它指的是什么对象,它都是 4 个字节(或可能是 8 个字节)。该参考不能改变。但是,引用的对象可以更改。

于 2013-09-17T09:25:33.610 回答
4

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

对象本身仍然可以修改。

于 2013-09-17T09:23:34.730 回答
0

当您创建final对 then 的引用时,StringBuffer这意味着无法重新分配该引用,但您始终可以更新该引用指向的对象。

于 2013-09-17T09:25:00.577 回答
0

Java 中的final关键字 is 表示不能重新分配引用该对象的变量。但这并不意味着对象本身不能改变其状态。

于 2013-09-17T09:27:31.197 回答
0

你的问题更适合数组对象。

final StringBuffer sb = new StringBuffer();

sb是最终的,您不能覆盖 sb 参考值,但与 sb 关联的对象具有某些不会改变的特性,这就是其中之一。

于 2013-09-17T09:26:58.763 回答
0

您已将其设为“最终”而不是“不可变”....最终意味着您无法重新分配引用并使其指向其他对象(在此上下文中)...您指向的对象的值可以更改。

例如:假设您有一个汽车对象的引用。您可以更改汽车的属性(颜色、音响系统、座椅等),但不能更改您指向的汽车。

为了防止对象的属性发生任何变化,您必须使其“不可变”。这可以通过将对象的设置器设为私有或其他方式来完成......

希望这是有道理的..

于 2013-09-17T09:57:33.577 回答