Primitives définies localement serait sur la pile. Toutefois, si une primitive ont été définis dans le cadre d'une instance d'un objet, que primitive serait sur le tas.
public class Test
{
private static class HeapClass
{
public int y; // When an instance of HeapClass is allocated, this will be on the heap.
}
public static void main(String[] args)
{
int x=1; // This is on the stack.
}
}
En ce qui concerne la mise à jour:
Les objets n'ont pas leur propre pile. Dans mon exemple, int y
serait en fait une partie de chaque instance de HeapClass
. Chaque fois qu'une instance de HeapClass est alloué (par exemple, new HeapClass()
), toutes les variables de membre de la HeapClass sont ajouté au tas. Ainsi, depuis les instances de l' HeapClass
sont alloués sur le tas, int y
serait sur le tas dans le cadre d'une instance d' HeapClass
.
Cependant, toutes les primitives des variables déclarées dans le corps de la méthode, serait sur la pile.
Comme vous pouvez le voir dans l'exemple ci-dessus, int x
sur la pile car il est déclaré dans un corps de méthode, non pas comme un membre d'une classe.