Java中使用引用来取代C++中的指针,那么什么是引用,java又是如何通过引用来取代C++中的指针的?
class Person
{
String name;
int age;
}
public class TestRefDemo {
public static void main(String args[])
{
Person p1 = null;//声明对象1,此对象值为null,尚未实例化
Person p2 = null;//声明对象2,尚未实例化
p1 = new Person();//实例化对象1
p1.age = 20;
p1.name = "Kimi";
p2 = p1;//将p1的引用赋给p2
System.out.println("姓名:"+ p2.name);
System.out.println("年龄:"+ p2.age);
p1 = null;
}
}
14行将p1的引用赋给p2,相当于p1和p2都同时指向同一块内存。
17行将p1对象赋值为null,表示此对象不再引用任何内存空间。
程序执行完第17行之后,实际上p1断开了对其之前实例化对象的引用,而p2则继续指向p1原先的引用。
如果程序最后再加入一段代码,令p2=null,则之前由p1创建的实例化对象不再有任何对象使用它,则此对象称为垃圾对象
所谓垃圾对象,就是程序中不再使用的对象。
class Change
{
int x = 0;
}
public class TestRefDemo {
public static void main(String args[])
{
Change c = new Change();
c.x = 20;
fun(c);
System.out.println("x = "+c.x);
}
public static void fun(Change c1)
{
c1.x = 25;
}
}
程序运行结果:
x = 25
Fun()方法接受的参数是Change c1,也就是说fun()方法接受的是一个对象的引用,所以,在fun方法中所做的操作,是会影响原先的参数。
最开始声明的对象c将其内部的x赋值为20,之后调用fun()方法,将对象赋值给c1,c1再继续修改x的值,此时c1与c同时指向同一内存空间,所以c1操作了x也就相当于c操作了x,所以fun()方法执行完毕后,x值为25。