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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马张立国 黑马帝   /  2012-5-6 19:43  /  1825 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

final  SringBuffer fsb= new StringBuffer("abc")
static  SringBuffer ssb= new StringBuffer("abc")
fsb=new StringBuffer("bro")  错      
fsb.append("bro") 对   
ssb=new StringBuffer("bro")对
ssb.append("bro")错      
上面的例子总结:
fianl   引用不能变,引用的对象可变
static   引用能变,引用的对象不能变
当被 final static同时修饰时  两者都不能变,但可以赋值给同类型的另一个变量
例如:   static  fianl  SringBuffer sfsb= new StringBuffer("abc");
              StringBuffer  str = null;
              str = sfsb;(这个地方是否有点绕,想一下内存图)
学习的知识积累 希望对在学基础的兄弟们有帮助

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
对楼主的提问,我稍有不同见解:
final  SringBuffer fsb= new StringBuffer("abc")
static  SringBuffer ssb= new StringBuffer("abc")
fsb=new StringBuffer("bro")  错      
fsb.append("bro") 对   
ssb=new StringBuffer("bro")对
ssb.append("bro")错                              ???,你确定会报错吗?我的就没问题啊
上面的例子总结:
fianl   引用不能变,引用的对象可变                        此处我要斧正的就是final修饰引用属性的时候,地址不可改变,但属性本身的值可以改变
static   引用能变,引用的对象不能变                   你想得太多了吧,他不就是一个静态初始化标志吗?,为什么不能给static对象重新赋值呢?
当被 final static同时修饰时  两者都不能变,但可以赋值给同类型的另一个变量      
我觉的此句不严谨,如果修饰引用类型,是引用的地址不能改变,如果是基本数据类型就是值不能变。

回复 使用道具 举报
潇洒飘过
意思一样
回复 使用道具 举报
恩 好想不严谨,这是我学习总结的,如下是具体例子:
使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

     使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:

     Final StringBuffera=newStringBuffer("immutable");
执行如下语句将报告编译期错误:

     a=newStringBuffer("");
但是,执行如下语句则可以通过编译:

a.append(" broken!");

     有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来的参数对象:

public void method(final  StringBuffer  param)

{

}

     实际上,这是办不到的,在该方法内部仍然可以增加如下代码来修改参数对象:

     param.append("a");
使用static关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

关于static确实是我想多了(学晕了,总结了错误结果),而最后一句,我是想表达这样的意思
public class ListTest {
public static final int x=1;
public static void main(String[] args){
int y=x;
System.out.println(y);
}
}
感谢你的帮助,要不然我还在错误中呢,谢谢
回复 使用道具 举报
学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马