黑马程序员技术交流社区
标题:
final
[打印本页]
作者:
zdf091119
时间:
2012-10-29 17:25
标题:
final
书上说 final修饰的变量不变,这个变量不变时什么意思,我试了下
public static void main(String args[]){
final StringBuffer a=new StringBuffer("abc");
final StringBuffer b=new StringBuffer("abc");
// a=b; 这句编译失败的
System.out.print(a==b);
a.append(123); //这句编译成功
}
是不是final修饰的变量指向了一个 对象,那么就只能指向这个变量的地址值,变量的内容可以变?
作者:
周万谋
时间:
2012-10-29 17:38
final修饰的引用型变量,变量的值是固定不变的,就是不可以再指向另外的对象了;
但是变量的属性值是可变的,就是对象的内容是可以变的。
例如你的例子:a = new StringBuffer("abc")这个对象被final修饰后引用值不变了,但是对象的内容能修改,因为它的属性值可以变。
在这里要注意区分对象的引用值和对象的属性值噢。
作者:
毕影彬
时间:
2012-10-29 17:51
final 修饰的变量,是说引用指向的内存地址不变。 而不是说,指向的对象是不可操作的。
作者:
李靖
时间:
2012-10-29 18:01
StringBuffer和String的区别就是在于String长度不可变,StringBuffer长度可变,而加上final表示引用的地址不能再发生变化,因为StringBuffer可以再原来引用地址的基础上加内容,所以a.append("123"),编译成功。而a=b,相当于要把b的引用指向a,就是要更改a的引用地址,所以编译失败
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2