原创 对不变的data和object references 使用final(注意这里指的是references而不是对象)收藏

新一篇: cascade的理解。 | 旧一篇: 参数以by value方式而非by reference方式传递

许多语言都提供常量数据用来表示那些既不会改变也不能被改变的数据。java关键词final用来表示常量数据,如:

public static final int HEIGHT = 200;

假如你在以后的代码对 HEIGHT进行修改的话就无法通过编译。

如:

HEIGHT = 120;

假如我们想定义一个常量对象,又该如何呢?

class Circle{

   private double rad;

   public void setRad(double rad){

      rad = rad;

   }

   public double getRad(){

     return rad;

  }

}

public class FinalTest{

    private static final Circle wheel = new Circle(5.0);

    public static void main(String args[]){

        wheel.setRad(6.0);

    }

}

这个程序可以编译,也可以运行,为什么这个又可以呢?实际上wheel的值并没有改变,我们改变的是wheel所指的对象。wheel并没有变化。仍然指向(代表)同一个对象。变量wheel是一个object reference,它指向对象所在的heap的位置。

假如  执行wheel=new Circle(7.4); 编译这段代码会发生编译错误。由于我们企图改变final型变量wheel的值,所以这个示例将产生编译错误,换言之,代码企图令wheel指向其他对象,变量wheel是final,因此也是immutable(不可变的)。它必须指向同一个对象。然而wheel所指的对象并不受关键词的影响。

假如你想让对象不能修改的话, 就让这个对象为immutable 并且是final的

发表于 @ 2005年06月17日 11:16:00|评论(loading...)|编辑

新一篇: cascade的理解。 | 旧一篇: 参数以by value方式而非by reference方式传递

评论

#DM 发表于2005-06-22 10:44:00  IP: 61.186.252.*
It's google's blog,not yours!
#dengyin 发表于2005-06-23 12:29:00  IP: 61.186.252.*
I like to steal other's knowledge and gather them.
#dengyin 发表于2005-06-23 12:35:00  IP: 61.186.252.*
I love to share thinking with others.

I hope we can communicated our thinking.
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © dengyin2000