A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马肖凯骏 中级黑马   /  2012-3-17 00:19  /  1822 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马肖凯骏 于 2012-3-17 00:28 编辑

final使得被修饰的变量"不变",但是由于对象型变量的本质是“引用”,使得“不变”也有了两种含义:引用本身的不变,和引用指向的对象不变。
那么到底是哪个不会发生变化呢?
引用本身的不变:
final StringBuffer a=new StringBuffer("immutable");
final StringBuffer b=new StringBuffer("not immutable");
a=b;//编译期错误

引用指向的对象不变:
final StringBuffer a=new StringBuffer("immutable");
a.append(" broken!"); //编译通过

这个该怎么理解,我不大明白

4 个回复

倒序浏览
final StringBuffer a=new StringBuffer("immutable");
StringBuffer是一个集合容器  也是一个类  你创建了集合对象  引用时a
  加上final的意思是这个a引用就永远指向这个容器所创建的这个对象了   
   er  immutable 是容器里面的对象  你在这个容器中添加对象是不会有问题的
只要你不给a重新再创建一个容器对象就不会有问题的   
   比如你有一个木桶  这个木桶就是一个容器  而你就是这个对象的引用  也就是说 你指向了木桶
    加final就是你只能有这一个木桶了   你在木桶里面添加其他东西 比如水  衣服等等 都不会有问题的  但是你如果在别的桶里装东西就不行了
因为你终生就这一个木桶了
回复 使用道具 举报
贠(yun)靖 发表于 2012-3-17 00:50
final StringBuffer a=new StringBuffer("immutable");
StringBuffer是一个集合容器  也是一个类  你创建 ...


好精辟,谢谢
回复 使用道具 举报
final StringBuffer a=new StringBuffer("immutable");
final StringBuffer b=new StringBuffer("not immutable");
a=b;//编译期错误
原因是a和b是不同的地址

final StringBuffer a=new StringBuffer("immutable");
a.append(" broken!"); //编译通过
紧紧是a这个地址不变,它指向的对象可以改变


回复 使用道具 举报
final关键字
1、final的变量值不能被改变
     final的成员变量不能被改变
     final的局部变量不能被改变
2、final的方法不能被重写
3、final的类不能被继承
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马