黑马程序员技术交流社区
标题:
关于final与static的小知识点
[打印本页]
作者:
黑马张立国
时间:
2012-5-6 19:43
标题:
关于final与static的小知识点
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;(这个地方是否有点绕,想一下内存图)
学习的知识积累 希望对在学基础的兄弟们有帮助
作者:
张小锋
时间:
2012-5-7 05:04
对楼主的提问,我稍有不同见解:
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同时修饰时 两者都不能变,但可以赋值给同类型的另一个变量
我觉的此句不严谨,如果修饰引用类型,是引用的地址不能改变,如果是基本数据类型就是值不能变。
作者:
—__
时间:
2012-5-7 05:35
潇洒飘过
意思一样
作者:
黑马张立国
时间:
2012-5-7 14:08
恩 好想不严谨,这是我学习总结的,如下是具体例子:
使用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);
}
}
感谢你的帮助,要不然我还在错误中呢,谢谢
作者:
H_H_K
时间:
2012-5-7 14:31
学习了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2