Java中引用,与 有无指针问题
2013-09-17 17:56
211 查看
Java中没有指针,但可以说,Java中都是“指针”,此处指针显然不是C/C++中的指针意思,应该是引用的意思。Java中变量存储的是对象的地址,而不是对象的内容:
如下表达式:
A a1 = new A();
它代表A是类,a1是引用,a1不是对象,new A()才是对象,a1引用指向new A()这个对象。
在JAVA里,“=”不能被看成是一个赋值语句,它不是在把一个对象赋给另外一个对象,它的执行过程实质上是将右边对象的地址传给了左边的引用,使得左边的引用指向了右边的对象。JAVA表面上看起来没有指针,但它的引用其实质就是一个指针,引用里面存放的并不是对象,而是该对象的地址,使得该引用指向了对象。在JAVA里,“=”语句不应该被翻译成赋值语句,因为它所执行的确实不是一个赋值的过程,而是一个传地址的过程,被译成赋值语句会造成很多误解,译得不准确。
再如:
A a2;
它代表A是类,a2是引用,a2不是对象,a2所指向的对象为空null;
再如:
a2 = a1;
它代表,a2是引用,a1也是引用,a1所指向的对象的地址传给了a2(传址),使得a2和a1指向了同一对象。
综上所述,可以简单的记为,在初始化时,“=”语句左边的是引用,右边new出来的是对象。
在后面的左右都是引用的“=”语句时,左右的引用同时指向了右边引用所指向的对象。
再所谓实例,其实就是对象的同义词。
如下表达式:
A a1 = new A();
它代表A是类,a1是引用,a1不是对象,new A()才是对象,a1引用指向new A()这个对象。
在JAVA里,“=”不能被看成是一个赋值语句,它不是在把一个对象赋给另外一个对象,它的执行过程实质上是将右边对象的地址传给了左边的引用,使得左边的引用指向了右边的对象。JAVA表面上看起来没有指针,但它的引用其实质就是一个指针,引用里面存放的并不是对象,而是该对象的地址,使得该引用指向了对象。在JAVA里,“=”语句不应该被翻译成赋值语句,因为它所执行的确实不是一个赋值的过程,而是一个传地址的过程,被译成赋值语句会造成很多误解,译得不准确。
再如:
A a2;
它代表A是类,a2是引用,a2不是对象,a2所指向的对象为空null;
再如:
a2 = a1;
它代表,a2是引用,a1也是引用,a1所指向的对象的地址传给了a2(传址),使得a2和a1指向了同一对象。
综上所述,可以简单的记为,在初始化时,“=”语句左边的是引用,右边new出来的是对象。
在后面的左右都是引用的“=”语句时,左右的引用同时指向了右边引用所指向的对象。
再所谓实例,其实就是对象的同义词。
相关文章推荐
- 关于C++和Java的引用和指针的问题
- 【java基础】引用类型数组初始化中,setter和getter函数空指针问题
- JAVA中的指针,引用及对象的clone
- 遇到问题---java---myeclipse中maven项目引用另一个导致的resource文件混乱的问题
- Java语言学习--Java引用以及NullPointerException问题的解决
- Java Puzzlers笔记--puzzle 13: Animal Farm 优先级以及对象引用问题
- Java空指针问题
- java中容器Vectort用add添加对象是对象引用的问题
- 关于Java对象作为参数传递是传值还是传引用的问题
- JAVA中的指针,引用及对象的clone
- java——与c++之不同——复合类型——指针 引用 struct union
- java 空引用问题值得注意
- Java300StudyNote(3)-Java动态编译(DynamicCompile)、动态运行、反射调用mian方法、JavaCompiler.run()空指针问题
- JAVA中的值传递和引用传递问题
- spark 从HIVE读数据导入hbase中发生空指针(java.lang.NullPointerException)问题的解决
- Java传参的值传递和引用传递问题(转)
- 解决Eclipse中Java工程间循环引用而报错的问题
- (遇到的一个问题)空指针引用, 是可以改变这个指针所指内容的。
- poi docx转html遇到空指针问题或java.lang.NoClassDefFoundError: org/apache/poi/xwpf/usermodel/IRunBody
- C/C++中指针和引用之相关问题深入研究