java中的指针学习心得

在java中,object就是一个指针,它指向了一片内存地址,里面存储了object中的变量。

所以我们也可以使用这一技巧来处理指针。

下举一c中的指针例子,我们接下来把它改写成java, 首先是c版本

1 void main() {

2int*x;// 建立指针x,y

3int*y;// (但是还没有指向任何目的地)

4

5x = malloc(sizeof(int));// 分配一块可以存储int的内存区域

6// 让x存储这块内存的地址

7

8*x = 42;// 将42存储到这个目的地

9

10*y = 13;// 错误,y没有指向任何区域,所以这里会报错

11

12y = x;// 让y指向x所指向的目的地

13

14*y = 13;// 将13存储到y所指向的目的地,其实和x所指向的目的地是一个地方

15 }

16

java版本

1 class intobj {

2public int value;

3 }

4

5 public class binky() {

6public static void main(string[] args) {

7intobjx;//建立指针x,y

8intobjy;// (都还没有指向任何目的地)

9

10x = new intobj();// 分配一块内存区域

11// 让x指向这块内存区域,就是x存储这块内存的地址

12

13x.value = 42;// 将42存储进内存区域

14

15y.value = 13;//错误,y没有指向任何内存区域,用java的话说就是没有初始化

16

17y = x;// 让y指向x所指向的内存区域,那么即使y不初始化,也可以开始使用

18

19y.value = 13;// 将13存储到y所指向的内存区域,就是x所指向的内存区域

20}

21 }

22

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

下面的例子更清楚的表达了这一点。

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

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

c linklist code

1 struct node {

2int value;

3struct node* next;

4 };

5

6

7 {

8// 建立指针

9struct node* x;

10struct node* y;

11struct node* z;

12

13// 分配内存

14x = malloc(sizeof(node));

15y = malloc(sizeof(node));

16z = malloc(sizeof(node));

17

18// 赋值

19x->value = 1;

20y->value = 2;

21z->value = 3;

22

23// 给指针变量赋值,值当然也是指针类型

24x->next = y;

25y->next = z;

26z->next = x;

27 }

28

java linklist code

1 class node {

2public int value;

3public node next;

4 };

5

6 {

7// 建立指针,就是实例化类

8node x;

9node y;

10node z;

11

12// 初始化,也就是让指针指向某个内存区域

13x = new node();

14y = new node();

15z = new node();

16

17// 给其中的变量值赋值

18x.value = 1;

19y.value = 2;

20z.value = 3;

21

22// 给其中的指针值赋值,赋的值当然也是指针类型

23x.next = y;

24y.next = z;

25z.next = x;

26 }

27

我们可以看到在java linklist的最后部分x.next=y;由于next是一个指针类型,那么给它赋的值必然也是指针类型,

那么y必然也是指针类型,又因为y为node class的一个instance,所以可见所有的instance的名字其实就是一个指针

所以这里才这样来实现linklist,以前我对于java的linklist一直觉得很神奇,怎么能够在自己的作用域中间还包含了自己的类,学习了指针的概念以后就明白了,其实instance自己就是一个指针,不过是在instance里面包含另外一个指针而已。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值