Java JVM创建了多少个对象
如果我们使用Java JVM创建了多少个对象,java,jvm,Java,Jvm,如果我们使用 Boolean布尔=新的布尔值(true) 及 Integer=新整数(10) 那么创建了多少个对象以及它们位于何处?在代码中,您将得到一个由整数引用的整数实例和一个由布尔引用的布尔实例。实例将在堆上创建 请参阅:在您的代码中,您将得到一个由整数引用的整数实例和一个由布尔引用的布尔实例。实例将在堆上创建 见: 创建了多少个对象,它们位于何处 创建了两个对象。每个new将创建一个新对象 所有Java对象都驻留在堆中。。。因此,它们驻留在堆中 另一方面,如果使用int而不是In
Boolean布尔=新的布尔值(true)代码>
及
Integer=新整数(10)代码>
那么创建了多少个对象以及它们位于何处?在代码中,您将得到一个由整数
引用的整数
实例和一个由布尔
引用的布尔
实例。实例将在堆上创建
请参阅:在您的代码中,您将得到一个由整数
引用的整数
实例和一个由布尔
引用的布尔
实例。实例将在堆上创建
见:
创建了多少个对象,它们位于何处
- 创建了两个对象。每个
new
将创建一个新对象
- 所有Java对象都驻留在堆中。。。因此,它们驻留在堆中
另一方面,如果使用int
而不是Integer
和boolean
而不是boolean
,则:
- 不创建任何对象
- 值
true
和10
将在变量中。。。因此,它将驻留在变量驻留的任何地方。这将取决于它们是什么类型的变量
最后,考虑这个版本:
Boolean boolean = true
Integer integer = 10;
此版本与原始版本之间的区别在于,两个值是通过自动装箱生成的。这将创建新对象或重用以前创建并缓存的对象。(这取决于类型、JVM实现,在某些情况下还取决于JVM选项配置的缓存大小。)
因此,答案将是:
- 根据上述因素,将创建零个、一个或两个对象
- 对象将在堆中(与前面一样)
注意:自动装箱通过调用包装类valueOf
方法来获取对象。您可以在自己的代码中显式调用它,作为自动装箱的替代方法。这样做比使用new
更好
Integer i1 = new Integer(10); // bad - generates an unnecessary object
Integer i2 = 10; // good - auto-boxing uses (may use) cached object
Integer i3 = Integer.valueOf(10); // equivalent to auto-boxing
创建了多少个对象,它们位于何处
- 创建了两个对象。每个
new
将创建一个新对象
- 所有Java对象都驻留在堆中。。。因此,它们驻留在堆中
另一方面,如果使用int
而不是Integer
和boolean
而不是boolean
,则:
- 不创建任何对象
- 值
true
和10
将在变量中。。。因此,它将驻留在变量驻留的任何地方。这将取决于它们是什么类型的变量
最后,考虑这个版本:
Boolean boolean = true
Integer integer = 10;
此版本与原始版本之间的区别在于,两个值是通过自动装箱生成的。这将创建新对象或重用以前创建并缓存的对象。(这取决于类型、JVM实现,在某些情况下还取决于JVM选项配置的缓存大小。)
因此,答案将是:
- 根据上述因素,将创建零个、一个或两个对象
- 对象将在堆中(与前面一样)
注意:自动装箱通过调用包装类valueOf
方法来获取对象。您可以在自己的代码中显式调用它,作为自动装箱的替代方法。这样做比使用new
更好
Integer i1 = new Integer(10); // bad - generates an unnecessary object
Integer i2 = 10; // good - auto-boxing uses (may use) cached object
Integer i3 = Integer.valueOf(10); // equivalent to auto-boxing
将创建2个对象。。一个布尔对象和一个整数对象驻留在堆内存中。2个对象将被创建。。一个布尔对象和一个整数对象驻留在堆内存中。2个对象被创建,它们驻留在boolean
和integer
技巧问题1和0指向的地址中。第一行创建一个对象,第二行不运行,因为它不编译,所以不能创建任何东西。对象总是在堆上创建的。对不起@Andreas。我会编辑这个问题。你的意思是使用包装类创建一个原始数据类型和直接赋值没有区别吗?像新的整数(20)一样,INTX=20?创建2个对象,它们位于boolean
和Integer
技巧问题1和0指向的地址中。第一行创建一个对象,第二行不运行,因为它不编译,所以不能创建任何东西。对象总是在堆上创建的。对不起@Andreas。我将编辑这个问题。您的意思是,使用包装类创建基本数据类型和直接赋值之间没有区别吗?就像新整数(20)与int x=20一样?对象实例没有名称,也不位于堆栈上,它们位于堆上。引用实例的引用值具有名称,并驻留在堆栈或堆上,具体取决于代码所在的位置。重新格式化的我的答案a bitObject实例没有名称,也不驻留在堆栈上,它们驻留在堆上。引用实例的引用值具有名称并驻留在堆栈或堆上,具体取决于代码所在的位置