黑马程序员技术交流社区

标题: java 中的引用 [打印本页]

作者: 中国力量    时间: 2014-5-26 19:47
标题: java 中的引用
请问下 java中的引用 到底是啥意思?至今没有弄明白
比方说 person p = new person();可以把p理解为引用吗?谢了
作者: wangkerui    时间: 2014-5-26 20:04
在java里面,是没有指针的(程序员是不需要处理指针问题的,尽管内核机制是 指针),这是java傲人的优点之一,但是,实际上在学习对象引用的时候,完全按照指针来理解。
java的数据类型分为两类:基本数据类型,引用类型,现分类说明:
int i=0;
person p = new person()
这两条语句有什么不同,又有什么相似?
对比理解不难发现,等号左边,声明的是变量,右边是“值”,不管是1,2,3还是一个内存地址,等号是赋值。。。具体的就不用我细说了吧

作者: 947415283    时间: 2014-5-26 22:03
毕老师的视频多看几遍
作者: 莞漂族    时间: 2014-5-27 15:46
可以,person类型的引用p指向了person类型的对象。为什么p能指向person类型的对象呢?因为:person p = new person();这条语句执行后,在栈内存中产生一个变量p,在堆内存中开辟一块空间存入person对象,同时将该对象的地址返回存在变量p中,p的值就是person对象的地址,这样就说p指向了该对象。
作者: AntThinking_toT    时间: 2014-5-27 16:26
java中内存类型分为栈和堆,Person p = new Peson()语句,会做三件事,第一件事在栈中申请变量p的空间(因为Person是类,引用数据类型,与int这样的基础数据类型不一样,p中存储的是地址,而不是真实的值,我感觉这个地址就是引用);第二件事就是在堆中new出Person对象,并得到其内存地址,也就是引用;第三件事把地址(引用)赋值给p这个引用变量。
总结:Person p = new Person();
    Person:引用数据类型
    p:引用变量
    new Person():引用,其实就是内存地址。
这样就应该清楚了。
作者: 中国力量    时间: 2014-5-27 20:23
wangkerui 发表于 2014-5-26 20:04
在java里面,是没有指针的(程序员是不需要处理指针问题的,尽管内核机制是 指针),这是java傲人的优点之 ...

额 谢了
作者: \(^o^)/    时间: 2014-5-29 00:34
这句话在内存当中做了
1、因为new用到了person.class字节码文件,所以会先找到person.class文件并加载到内存中。
2、执行该类中的static代码块,如果有的话给person类进行初始化。
3、在堆内存中开辟空间,分配内存地址。
4、在堆内存中建立对象的特有属性并进行默认初始化。
5、对属性进行显示初始化。
6、对对象进行构造代码块初始化。
7、对对象进行对应的构造函数初始化、
8、将内存地址赋给栈内存中的p变量。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2