由于所有对象都是用Java中的"new"创建的,这是否意味着它们都是在堆上创建的?

sof*_*ver 5 java heap-memory

此查询的目的是比较Java和C++的一个方面,它与"new"运算符有关.

现在,我知道在C++中有两种创建对象的方法; 有或没有"新"运算符.如果没有该运算符,则不会在堆区域中分配空间,而在存在的情况下,会在堆区域中分配空间.

Java怎么样?我注意到"new"运算符用于创建每个对象.甚至数组都是使用"new"运算符创建的.这是否意味着在Java中只存在一个对象存在的位置 - 即堆区域?

谢谢.

mei*_*rav 6

是的,new运算符总是为堆上的对象分配内存.与C++不同,Java中的对象无法在堆栈上创建.

  • 堆的概念是特定于实现的,因为虚拟机规范有意不限制存储选项. (2认同)
  • +1会改为说"与C++不同,Java中没有办法说你想要在堆栈上分配一个对象" (2认同)