首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Integer a=10在java中是有效的语句?

为什么Integer a=10在java中是有效的语句?
EN

Stack Overflow用户
提问于 2020-08-04 16:21:07
回答 3查看 589关注 0票数 1

据我所知,Integer是用于int的包装器。对象的值初始化时必须创建对象。

代码语言:javascript
复制
Integer x=new Integer(10);

Integer x=10;似乎工作得很好。有谁能解释一下吗?

EN

回答 3

Stack Overflow用户

发布于 2020-08-04 16:27:41

多亏了自动拳击。

自动装箱是Java编译器在基本类型和它们对应的对象包装类之间进行的自动转换。例如,将int转换为Integer,将double转换为Double,依此类推。如果转换是相反的,则称为取消装箱。

见docs https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

票数 3
EN

Stack Overflow用户

发布于 2020-08-04 16:30:46

自动拳击在大多数上下文中自由地在原语和它们的包装类之间进行转换,并在JLS,第5.1.7节。装箱转换中进行了描述。

装箱转换将基本类型的表达式转换为相应的引用类型表达式。具体来说,以下九个转换称为装箱转换:

  • int类型到Integer类型

在运行时,装箱转换将按以下方式进行:

  • 如果pint类型的值,则装箱转换将p转换为类和类型Integer的引用r,这样r.intValue() == p .

如果被装箱的值p是整数字面值,int类型介于-128和127之间(§3.10.1),或布尔文字为true或false (§3.10.3),或字符介于'\u0000‘和'\u007f’之间(§3.10.4),则让a和b是p的任意两次装箱转换的结果。通常情况下是== b。

票数 2
EN

Stack Overflow用户

发布于 2020-08-04 16:30:27

自动拳击

https://en.wikipedia.org/wiki/Object_type_(object-oriented_programming)#Boxing是将原语值包装为等效类型类的对象的过程。https://en.wikipedia.org/wiki/Object_type_%28object-oriented_programming%29#Unboxing指的是相反的方向,从对象到原语。

例如,可以将int原语装箱为Integer

https://en.wikipedia.org/wiki/Object_type_(object-oriented_programming)#Autoboxing是Java编译器在幕后完成这个包装/解包装。

自动装箱简化了我们的应用程序程序员的生活。在我们的日常工作中,我们经常会认为原始和对象是一样的。但要知道他们不一样。在某些情况下,程序员必须意识到一个原语还是一个对象在手。享受自动装箱的方便,但不要盲目操作.

您的示例代码

在你的例子中:

代码语言:javascript
复制
Integer x = 10 ;

…编译器将10解析为int原语。然后,通过自动装箱,这个原语被包装成一个Integer对象.Integer对象的实例化是在幕后透明地进行的。然后将对该对象的引用分配给名为x的变量。

更多信息

请参阅上面维基百科的链接。看看甲骨文的教程

纯OOP

理解Java并不是纯粹的面向对象。如果是的话,我们将没有原语;我们只会有对象。所以我们就没有拳击了。

那么,为什么Java的设计者包括原语,给我们的生活增加了复杂性的皱纹呢?以方便从C和其他类C语言移植代码。在Java发明的时候,简单的移植是一个关键的要求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63251074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档