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指针指向的内容。
看到这里,如果还看不懂。。。老衲表示压力很大,找菩萨吧,老衲不能度你过苦海。。。(乐一乐大家!没有别的意思。哈哈)
-----------------------------------------------------苦难不是博得同情的资本,只有不断奋斗才能改变命运!
- Java指针详解___案例解答
- java反射案例详解
- Java反射案例详解
- java集合类详解 案例
- JAVA反射机制【详解+案例】
- java IO流案例详解
- 再再再论___数组名与指针
- java学习笔记___数据类型
- 1.Android loader详解___概述
- 4.Android loader详解___回调
- java修饰符详解及一些常见问题解答
- Java语言程序设计案例教程174页8.2.1我的解答
- 原创图书《Java基础与案例详解》
- JAVA 中 上传图片 案例详解
- Java-Swing编程之对话框案例详解
- 使用Java导出Excel案例详解
- 李刚java笔记___深入数组
- java ___ HashCode 和 equals ()
- 逝去的绝响
- .net mvc 微信开发笔记(四)------STREAM,POST/GET,XML解析,获取用户普通消息
- 内核配置编译
- Android反编译xml文件
- C++ 名称查找规则之 Koenig lookup
- Java指针详解___案例解答
- 实现SSH免密码登陆
- Linux下文件目录含义
- Linux守护进程(转载)
- 归并排序(二路归并)
- Java学习之多态
- GCC、GDB、Makefile
- PCL1.7.1安装方法
- Python LGB名称查找规则