Java指针详解___案例解答

来源:互联网 发布:西安软件培训基地 编辑:程序博客网 时间:2024/06/06 13:14

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

int k1=1;int k2=k1;k2+=8;System.out.println("k1:"+k1);

大声回答,k1等于几?

输出:

k1:1

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

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


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


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


可以看到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");


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


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


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

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


1 0