2012-09-04 38 views
5

如果我创建一个静态块并在那里创建一个对象,说一些其他类,那么这个对象会在堆上还是堆栈上创建?内存中的哪些对象位于静态块中创建的对象?

class Hello { 
    static { 
     Abc abcObject=new Abc(); 
    } 
    // Other Code... 
} 
+0

这将是堆。 – Santosh

+0

谢谢................. –

+0

欢迎来到Stack Overflow。当有人在这里帮助你时,习惯上接受一个答案。您可以通过点击您认为正确的答案旁边下方复选标记的大纲来做到这一点。谢谢! –

回答

4

该对象在堆中创建,但该对象的引用位于堆栈中。

您创建的变量abcObject位于堆栈中。这包含存储在new Abc()对象的堆中的内存地址。

+0

_reference object is in the stack_ can you elaborate/ – Santosh

+0

@Santosh所有本地变量都在堆栈中。 –

+0

唉......知道了。对不起:) – Santosh

7

无论静态(或)静态,对象始终在堆上。

参考将在堆栈上。

+0

+1'abcObject'是一个局部变量,它是一个对象的引用。这将在堆栈上。引用的对象将在堆上。 –

+0

@PeterLawrey:同意并更新答案。 – kosa

+0

@ user1646626:不客气。享受编码。 – kosa