java中的实例化和引用变量有什么区别?

java中的实例化和引用变量有什么区别?就如这张图图片说明

 抛开函数调用,其实你的问题可以简化为:
Ref1 r1 = new Ref1();
Ref1 r2 = r1;
现在的问题是,为什么第二行不需要new。
其实第一行可以再分解为两行
Ref1 r1;
r1 = new Ref1();
第二行也可以分为两行
Ref1 r2
r2 = r1;
其实这两者唯一的不同是,一个 = new Ref1(); 一个 = 另一个对象引用。
其实new的作用是创建了一个对象,此时对象还没有指向任何变量,我们用一个变量接收。
而如果我们已经创建了对象,我们可以直接让它指向你的对象引用。

http://ask.csdn.net/questions/264932

如果你传递的是一个null,而不是对r1指向地址的引用,就会引发空指针异常。
相当于c中指针指向了一个未开辟的内存空间

因为你main中调用的时候传递的r1对象,就是通过new实例化了,调用tell方法的时候传递的是同一个引用对象的啊。

而你的代码不过是在此基础上把r2=r1放入函数参数,这个由编译器自动给r2赋值。

实例化就是给对象赋值,开辟一块内存空间,而引用只是指向已经实例化的对象

r2 只是一个形参,当你调用tell()方法的时候,你必须得传入一个实例,也就是说传入的参数必须是一个实例化过后的参数。
像你代码中 r1 就是一个实例化过后的参数。

r2是一个引用变量的形参,你可以把r2看作是一个地址,在你调用tell()函数时,函数需要一个参数,比如tell(rtest),rtest是Ref1的一个对象,那么r2就会获得rtest的值,r2便会指向rtest所指向的实例化对象,那么r2就可以调用实例化对象中的成员变量了。