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

groovy中int和Integer类型之间的区别

发布时间:2020-12-14 16:25:58 所属栏目:大数据 来源:网络整理
导读:我刚开始学习groovy,我正在阅读“Groovy in Action”. 在本书中,我遇到了一个声明:无论是声明还是将变量转换为int或Integer类型都无关紧要.Groovy使用引用类型(Integer). 所以我尝试将null值赋给类型为int的变量 int a = null 但它给了我以下例外 org.codeh
我刚开始学习groovy,我正在阅读“Groovy in Action”.
在本书中,我遇到了一个声明:无论是声明还是将变量转换为int或Integer类型都无关紧要.Groovy使用引用类型(Integer).

所以我尝试将null值赋给类型为int的变量

int a = null

但它给了我以下例外

org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object ‘null’ with class ‘null’ to class ‘int’. Try ‘java.lang.Integer’ instead
at Script1.run(Script1.groovy:2)

然后我尝试将null值赋给类型为Integer的变量

Integer a = null

它工作得很好.

任何人都可以帮助我理解groovy的行为方式或背后的原因吗?

解决方法

核心问题是 primitives不能为空. Groovy用 autoboxing假装出局.

如果在数字中存储空值,则无法将其存储在int / long / etc字段中.将空数转换为0是不正确的,因为这可能是有效值. Null意味着尚未制定任何价值或选择.

int是primitive type,不被视为对象.只有对象可以具有空值,而int值不能为null,因为它是值类型而不是引用类型

对于primitive types,我们有固定的内存大小,即对于int,我们有4个字节,null仅用于对象,因为内存大小不固定.

所以默认我们可以使用: –

int a = 0

(编辑:李大同)

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

    推荐文章
      热点阅读