java中的指针[精华]java中的指针[精华]
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存储这...
java中的指针[精华]
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 *x = 42; // 将42存储到这个目的地
9
10 *y = 13; // 错误,y没有指向任何区域,所以这里会报错
11
12 y = x; // 让y指向x所指向的目的地
13
14 *y = 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代码,我折叠了一下,免得太长碍眼。
1 struct Node {
2 int value;
3 struct Node* next;
4 };
5
6
7 {
8 // 建立指针
9 struct Node* x;
10 struct Node* y;
11 struct Node* z;
12
13 // 分配内存
14 x = malloc(sizeof(Node)); 15 y = malloc(sizeof(Node)); 16 z = malloc(sizeof(Node)); 17
18 // 赋值
19 x->value = 1;
20 y->value = 2;
21 z->value = 3;
22
23 // 给指针变量赋值,值当然也是指针类型 24 x->next = y; 25 y->next = z; 26 z->next = x; 27 }
28
1 class Node {
2 public int value;
3 public Node next;
4 };
5
6 {
7 // 建立指针,就是实例化类
8 Node x;
9 Node y;
10 Node z;
11
12 // 初始化,也就是让指针指向某个内存区域 13 x = new Node();
14 y = new Node();
15 z = new Node();
16
17 // 给其中的变量值赋值
18 x.value = 1; 19 y.value = 2; 20 z.value = 3; 21
22 // 给其中的指针值赋值,赋的值当然也是指针类型 23 x.next = y;
24 y.next = z;
25 z.next = x;
26 }
27
我们可以看到在java linklist的最后部分x.next=y;由于next是一个指针类型,那么给它赋的值必然也是指
针类型,
那么y必然也是指针类型,又因为y为node class的一个instance,所以可见所有的instance的名字其实就是
一个指针
所以这里才这样来实现linklist,以前我对于java的linklist一直觉得很神奇,怎么能够在自己的作用域中间
还包含了自己的类,学习了指针的概念以后就明白了,其实instance自己就是一个指针,不过是在instance里
面包含另外一个指针而已。
本文档为【java中的指针[精华]】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。