final StringBuffer a=new StringBuffer("immutable");只是引用本身不变吗?他指向的对象可以改变吗? final就这一层意思吗?能不能使引用可变,指向的对象永远不变,怎么写?

解决方案 »

  1.   

    StringBuffer a=new StringBuffer("immutable");
    也就是说a只能指向这个StringBuffer对象,但是对象本身是可以变化的例如
    StringBuffer a=new StringBuffer("immutable1");
    StringBuffer b=new StringBuffer("immutable2");
    a=b;//这是不可以的,不能改变a的引用
    a.append(b);//这是可以的,可以改变a引用指向的对象本身
      

  2.   

    "final StringBuffer a=new StringBuffer("immutable");只是引用本身不变吗?
    他指向的对象可以改变吗? 
    final就这一层意思吗?
    能不能使引用可变,指向的对象永远不变,怎么写?"1、a的值不能够改变,但是它指向的对象本身的成员变量可以变化。
    2、“final就这一层意思吗?”,这里没有别的意思。但final修饰变量、方法、类时,各有自己的意思。
    3、String a;只要不使用final,a可以指向任何String对象;但是指向的对象——即String对象本身是不能够改变的。一般不变类的编写方式为:所有相应的方法返回一个新对象。
      

  3.   

    楼上的兄弟都说得很对哦,我也说两句吧.
    1.final如果用来修饰类,则这个类是不能被继承的,如楼上说的String类.
    2.final如用来修饰变量,则这个变量只能被赋一次值,但并不是说final修饰的变量是常量,有很多人认为final修饰的变量是常量,这是错误的.如final int a=(int)(math.random()*5);a只能被赋一次值,但这个值是随机的,每次运行都不一样,可见不是常量.
    3.final修饰的方法也是不能被继承的.
    4.故你说的的那个a只能指向一个对象,什么时候指是你的事,但一旦指向一个对象后就不能更改,但是对
      

  4.   

    楼上的错了
    final 修饰的方法只是不能被override