大家先看看下面的这个程序:---------》相信初级程序员就能看得懂
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指针指向的内容。
看到这里,如果还看不懂。。。老衲表示压力很大,找菩萨吧,老衲不能度你过苦海。。。(乐一乐大家!没有别的意思。哈哈)
-----------------------------------------------------苦难不是博得同情的资本,只有不断奋斗才能改变命运!