sinat_25136209
sinat_bond
采纳率39.6%
2016-06-21 11:36 阅读 2.0k
已采纳

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

8条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2016-06-21 13:11
     抛开函数调用,其实你的问题可以简化为:
    Ref1 r1 = new Ref1();
    Ref1 r2 = r1;
    现在的问题是,为什么第二行不需要new。
    其实第一行可以再分解为两行
    Ref1 r1;
    r1 = new Ref1();
    第二行也可以分为两行
    Ref1 r2
    r2 = r1;
    其实这两者唯一的不同是,一个 = new Ref1(); 一个 = 另一个对象引用。
    其实new的作用是创建了一个对象,此时对象还没有指向任何变量,我们用一个变量接收。
    而如果我们已经创建了对象,我们可以直接让它指向你的对象引用。
    
    点赞 2 评论 复制链接分享
  • w172087242 little_how 2016-06-21 11:37
    点赞 评论 复制链接分享
  • w172087242 little_how 2016-06-21 11:41

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

    点赞 评论 复制链接分享
  • wojiushiwo945you 毕小宝 2016-06-21 12:37

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

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2016-06-21 13:11

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

    点赞 评论 复制链接分享
  • meilidedabobo 夏未央-夜未眠 2016-06-22 08:00

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

    点赞 评论 复制链接分享
  • stick_to_do stick_to_do 2016-06-23 04:55

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

    点赞 评论 复制链接分享
  • u012780210 钓到鱼 2016-06-24 03:23

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

    点赞 评论 复制链接分享

相关推荐