java空间指针,Java指针详解___案例解答

大家先看看下面的这个程序:---------》相信初级程序员就能看得懂

int k1=1;

int k2=k1;

k2+=8;

System.out.println("k1:"+k1);

大声回答,k1等于几?

输出:

k1:1

这是为什么呢?不是明明k2已经指向了k1,然后k2的值发生改变,k1就要发生改变吗?

刚开始:k1 ,k2指向同一个内存地址:

6bce75f2da4f61a51171c66feff2e247.png

当发生语句:k2+=8的时候,我们这么看:k2=k2+8,第一步:k2+8,很简单啊,等于9呗,这时候,内存空间会自动分配一个新的内存给你储存!注意咯,k2这时候还是指向1!因为还没有进入第二步!

14392387aac3372b733893665d5bf3fe.png

第二步来了:k2=9!这时候才发生k2指针指向9所在的内存地址!

682d76672d156e6d0149f62f05ae8deb.png

可以看到k1像个忠诚的骑士,一直守“1”!所以咱们在System.out.print("k1:"+k1),的时候,输出是1!

同样的道理,你们可以去试试其他基础类型。

看到这里,你可能觉得这个很容易啊,我以后肯定都会了。

那,下面我们来加深一点点难度:

废话不多说,先上一个类:----------------》》初级程序员都看得懂

class User {

int id;

String name;

public User(int id, String name) {

super();

this.id = id;

this.name = name;

}

}

so Easy!XX在也不用担心我的学习。

别高兴的太早,User u1=new User(1, "u1_Name");

User u2=u1;

u2.name="u2_Name";

System.out.println("u1.name: "+u1.name);

大声回答自己,u1.name 是多少?

输出:u1.name: u2.Name

什么??居然是u2?难道是瞎了狗眼?不,你没看错,这确实是u2。这到底是为什么呢 ?其实是因为u1.name  和 u2.name 中的name 是同一个指针!什么意思?我们看图说话。

第一步:User u1=new User(1,"u1_Name");

4917815f72ede2957a10013cf5714df6.png

第二部:u2=u1,发生了什么故事?

e2a688077f7ea372b8164f4dcba8415b.png

看到了吗?原来是将u2中的name、id指针指向u1中的name、id指针!!!看到这里!应该明白了,你修改了u2.name指针指向的内容,其实就相当于修改了u1.name指针指向的内容。

a73b4bb4fa51706772be3e59d9e16083.png

看到这里,如果还看不懂。。。老衲表示压力很大,找菩萨吧,老衲不能度你过苦海。。。(乐一乐大家!没有别的意思。哈哈)

-----------------------------------------------------苦难不是博得同情的资本,只有不断奋斗才能改变命运!

原文:http://blog.csdn.net/u012427937/article/details/38169255

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值