如何保证引用到的对象是final的?

Andy84920 2007-01-17 10:23:48
final StringBuffer sb = new StringBuffer();
final StringBuffer tmp = new StringBuffer();
sb = tmp; //error

sb.append(tmp); //ok

可以看到sb本身是final的,但sb所引用到的对象是可以进行append操作的,是可以改变的。如何保证sb引用到的对象是final的呢?
...全文
296 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xoele 2007-01-18
  • 打赏
  • 举报
回复
这个也是没有办法的啊 ,因为 Java 里面所有东西都是指针,
要不你自己写个类,只读的,不让别人改,那不就是彻底的final了吗
luyang1016 2007-01-18
  • 打赏
  • 举报
回复
再补充以下:

public static final String str = "abc";

str = "def"; // 出错。

str 就是final的。

先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令str指向”abc”,

如果已经有”abc” 则直接令str指向“abc”。

接着又按照刚才的把"def"放进栈,将str指向"def".

但是由于 str 是 final, 指针变了, 所以错了
luyang1016 2007-01-18
  • 打赏
  • 举报
回复
相当于指针不能变,但指针所指的内容可变
===================================
精辟
believefym 2007-01-17
  • 打赏
  • 举报
回复
这个能保证?

final是说sb = tmp是不允许的,不是说引用的对象不可改变,相当于指针不能变,但指针所指的内容可变

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧