[6/2a1a] java中的指针学习心得

在java中,object就是一个指针,它指向了一片内存地址,里面存储了object中的变量。
所以我们也可以使用这一技巧来处理指针。
下举一C中的指针例子,我们接下来把它改写成java, 首先是c版本

 1 void main() {   
 2     int*    x;  // 建立指针x,y
 3     int*    y;  // (但是还没有指向任何目的地)
 4     
 5     x = malloc(sizeof(int));    // 分配一块可以存储int的内存区域
 6                                 // 让x存储这块内存的地址
 7     
 8     *= 42;    // 将42存储到这个目的地
 9     
10     *= 13;    // 错误,y没有指向任何区域,所以这里会报错
11     
12     y = x;      // 让y指向x所指向的目的地
13     
14     *= 13;    // 将13存储到y所指向的目的地,其实和x所指向的目的地是一个地方
15 }
16 

java版本

 1 class IntObj {
 2     public int value;
 3 }
 4 
 5 public class Binky() {
 6     public static void main(String[] args) {
 7         IntObj  x;  //建立指针x,y
 8         IntObj  y;  // (都还没有指向任何目的地)
 9         
10         x = new IntObj();   // 分配一块内存区域
11                             // 让x指向这块内存区域,就是x存储这块内存的地址
12         
13         x.value = 42;   // 将42存储进内存区域
14         
15         y.value = 13;   //错误,y没有指向任何内存区域,用java的话说就是没有初始化
16         
17         y = x;  // 让y指向x所指向的内存区域,那么即使y不初始化,也可以开始使用
18         
19         y.value = 13;   // 将13存储到y所指向的内存区域,就是x所指向的内存区域
20     }
21 }   
22 



 这样一来,java里面也就实现了c的指针操作。从这个例子我们可以看出,java的类、实例其实就是指针,
下面的例子更清楚的表达了这一点。

 再看一个例子,就是一个linklist的例子,它的结构如图

 

 

 还是先看C代码,再看Java代码,我折叠了一下,免得太长碍眼。

C linklist Code
Java linklist Code

 我们可以看到在java linklist的最后部分x.next=y;由于next是一个指针类型,那么给它赋的值必然也是指针类型,
那么y必然也是指针类型,又因为y为node class的一个instance,所以可见所有的instance的名字其实就是一个指针
所以这里才这样来实现linklist,以前我对于java的linklist一直觉得很神奇,怎么能够在自己的作用域中间还包含了自己的类,学习了指针的概念以后就明白了,其实instance自己就是一个指针,不过是在instance里面包含另外一个指针而已。

 

posted @ 2009-11-10 02:59  淡引  阅读(389)  评论(0编辑  收藏  举报