是一样的吗?或者静态函数中的new是否与实例方法中的new分配不同?
答案 0 :(得分:6)
不,效果是一样的。从静态方法和非静态方法范围分配之间没有区别。如果您正在考虑在堆栈上进行分配而在堆上进行分配(如在C / C ++中),这种差异在Java中并不那么突出,并且不受您从new
调用的位置的影响。默认情况下,每次使用new
时,都会在堆上分配一个对象 - 现代JVM(Java6及更高版本)中有一些例外,这些异常是由escape analysis等优化引起的(可能会分配一个对象)在堆栈上,如果它是线程和本地范围限制)。但是,本地原始变量和引用总是被压入堆栈。