加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

对象引用

发布时间:2020-12-14 16:56:15 所属栏目:大数据 来源:网络整理
导读:在赋值语句age=25中,使用Groovy的动态类型(dynamic typing)功能。age变量所引用值的类型是在其运行过程中,而不是在编译时确定的。动态类型通常会使程序变得更为简洁,这也是Groovy之所以简洁与灵活的的主要原因。执行此赋值语句时会创建一个Integer对象,

在赋值语句age=25中,使用Groovy的动态类型(dynamic typing)功能。age变量所引用值的类型是在其运行过程中,而不是在编译时确定的。动态类型通常会使程序变得更为简洁,这也是Groovy之所以简洁与灵活的的主要原因。执行此赋值语句时会创建一个Integer对象,并将25赋值给它,变量age的引用关系如图2-1所示。

图2-1 变量与对象引用

原文

译文

varible

变量

object

对象


变量与对象之间的关联关系被称为引用。变量引用了该对象所使用的内存部分。任何使用该变量的情况,如在表达式age+22中,将使用引用来获得与该对象相关的对象值。

请考虑下面的表达式:

def age = 25
def number = age

在groovy中,变量通常都和对象相关联。因此,第二个赋值语句的作用是,让number变量引用age变量所引用的同一个对象。图2-2是一个用来描述共享(或者别名)的范例。在这个范例中,两个变量均引用相同的对象。

图2-2 共享

原文

译文

varible

变量

object

对象

在后续的代码中,如果给age变量赋一个新值,其效果如图2-3所示。在这里,可以发现age变量现在引用了一个不同的对象,而number变量却仍然引用被age赋值首次创建的对象。

图2-3 重新赋值

原文

译文

varible

变量

object

对象


图2-4 内存垃圾

原文

译文

varible

变量

object

对象

最后,设想一下给number变量赋新值的效果。图2-4说明表示值25的那个对象现在不再被任何变量引用。因此,在后面的代码中将不能再次使用它。这是一个内存垃圾(garbage)范例,也就是一个没法被引用的对象。在Groovy中,垃圾收集器最终将收回这些对象所占用的内存空间,并将其内存空间分配给其他对象循环使用。

上述这些图说明说明了,在程序代码的任何地方,可以非常自由地给变量赋新值。更进一步来说,这些新值可以通过已经存在的值而拥有不同的数据类型。这既是Groovy的优点,同时也是它的弱点。举例来说,用户可以自由地将一个String值赋给前面引用Integer的变量,其危险在于:在程序代码中可能不会意识到此问题,并导致其他难以预测的后果。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读