据我所知,Integer 是 int 的包装类。因此,必须创建一个对象来初始化 a 的值。
Integer x=new Integer(10);
但<code>整数x=10似乎工作得很好。有人能解释一下怎么做吗?
装箱是将原始值包装为等效类型的类的对象的过程。取消装箱是指从对象到基本体的相反方向。
例如,可以将 int
基元装箱为整数
。
自动装箱是Java在幕后进行这种包装/展开的编译器。
自动装箱简化了我们应用程序程序员的生活。在我们的日常工作中,我们经常可以认为原始人和对象是相同的。但要知道它们是不一样的。在某些情况下,程序员必须知道手头是基元还是对象。享受自动装箱的便利,但不要盲目操作。
在您的示例中:
Integer x = 10 ;
...编译器将 10
解析为 int
原语。然后,通过自动装箱,该基元被包装为 Integer
对象。Integer
对象的实例化在后台透明地进行。然后将对该对象的引用分配给名为 x
的变量。
见上面维基百科的链接。且看甲骨文的教程。
要知道Java不是纯面向对象的。如果是的话,我们就没有原语了;我们只有物体。因此,我们将没有拳击。
那么,为什么Java的设计者包括原语,给我们的生活增加了复杂性呢?为了便于从C和其他类似C的语言移植代码。在Java发明的时候,简单的移植是一个至关重要的要求。
在大多数情况下,自动装箱可以在原语和它们的包装类之间自由转换,这在JLS 5 . 1 . 7中有描述。拳击转换。
装箱转换将基元类型的表达式转换为引用类型的相应表达式。具体来说,以下九个转换称为装箱转换:[…]
int
类型到整数
类型在运行时,装箱转换进行如下:
p
是类型int
的值,则装箱转换将p
转换为类的引用r
并键入整数
,使得r.intValue()==p
[…]如果要装箱的值 p 是介于 -128 和 127 之间的整数文本 (§3.10.1),或者布尔文本 true 或 false (§3.10.3),或者介于 '\u0000' 和 '\u007f' 之间的字符文字 (§3.10.4),则让 a 和 b 是 p 的任何两次装箱转换的结果。总是这样 a == b。
感谢自动装箱。
自动装箱是Java编译器在基本类型和它们对应的对象包装类之间进行的自动转换。例如,将int转换为Integer,将double转换为Double,等等。如果转换以另一种方式进行,这称为取消装箱。
查看文档https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html
可能重复:if语句末尾有分号 我在编程时,在代码中发现了一个bug,这是因为“if”语句后面有一个分号,它的长方体“{xxx}”被执行时就好像它有自己的作用域一样--所以一切都会被编译。 这回避了一个问题,为什么是: Java中的一个可能的语句,它似乎是一行无用的代码,可能会产生很多bug等等。
是否有类似于VB. NET或C#中提供的实例的Python等效语句?
问题内容: 我知道整数在Java中是不可变的。但是为什么要这样设计呢? 我找不到强制Integer不可变的用例。是否有类似String的技术原因? 字符串在网络连接,数据库URL等中用作参数。如果它是可变的,则很容易遭到破坏。 支持StringPool功能。 支持使用字符串作为参数的类加载机制。字符串可变会导致加载错误的类。 我知道有些包装很易变。 更新: 从对话中,并没有普遍的理由要求整数是不可
此行不显示可能的有损转换,而 上面的一行显示错误。有什么原因吗?
问题内容: 我正在阅读有关Java 10中发布的新功能的信息,我发现 引入Java 10 作为保留类型名称以减少冗长。它可以用作变量,方法和程序包名称,但是我们不能将其用作类或接口名称。 是类似于JavaScript中的关键字?Java 和JavaScript 之间到底有什么相似之处和区别? 问题答案: 两种语言在概念上都有某种相似的目的,但有一些重要的区别。 JavaScript是一种动态类型化
问题内容: 我惊讶地发现Go带有“ goto”语句。我一直被教导说,“ goto”语句已经成为过去,并且因为它阻塞了程序的实际流程,所以它变得邪恶,而函数或方法始终是控制流程的更好方法。 我肯定错过了什么。Google为什么要包含它? 问题答案: 当我们实际检查Go标准库的源代码时,我们可以看到s在哪些地方得到了很好的应用。 例如,在文件中,使用以下语句: 在从导入只是控制流使用的另一(布尔值)的