Alors que je pensais sur l'utilisation de la mémoire de différents types, j'ai commencé à devenir un peu confus de Java utilise de la mémoire pour les entiers lorsqu'ils sont passés à une méthode.
Dire, j'ai eu le code suivant:
public static void main (String[] args){
int i = 4;
addUp(i);
}
public static int addUp(int i){
if(i == 0) return 0;
else return addUp(i - 1);
}
Dans l'exemple qui suit, je me demande si ma logique suivante est correcte:
- J'ai fait un mémoire initialement pour l'entier i = 4. Puis-je passer à une méthode. Cependant, depuis les primitives ne sont pas fait en Java, dans le addUp(i == 4), j'en crée un autre entier i = 4. Ensuite, il y a un autre addUp(i == 3), addUp(i == 2), addUp(i == 1), addUp(i == 0) dans laquelle à chaque fois, puisque la valeur n'est pas fait, une nouvelle que j'valeur est alloué dans la mémoire.
- Alors, pour un seul "int i" de la valeur, j'ai utilisé 6 valeur entière de souvenirs.
Cependant, si je devais toujours passer par un tableau:
public static void main (String[] args){
int[] i = {4};
// int tempI = i[0];
addUp(i);
}
public static int addUp(int[] i){
if(i[0] == 0) return 0;
else return addUp(i[0] = i[0] - 1);
}
- Depuis que j'ai créer un tableau d'entiers de taille 1 et de passer ensuite que addUp qui sera à nouveau passé pour addUp(i[0] == 3), addUp(i[0] == 2), addUp(i[0] == 1), addUp(i[0] == 0), je n'ai eu qu'à utiliser 1 tableau d'entiers de la mémoire de l'espace, et donc beaucoup plus rentable. En outre, si je devais faire un int valeur à l'avance pour stocker la valeur initiale de i[0], j'ai toujours mon "original" de la valeur.
Ensuite, ce qui m'amène à la question, pourquoi les gens passent primitives comme les int dans les méthodes de Java? N'est-il pas bien plus efficace en terme de mémoire pour juste passer le tableau des valeurs de ces primitives? Ou en est le premier exemple d'une certaine façon toujours juste O(1) de la mémoire?
Et sur le dessus de cette question, je me demande simplement la mémoire des différences de l'aide int[] et int en particulier pour une taille de 1. Je vous remercie à l'avance. Je me demandais simplement d'être plus efficace en terme de mémoire à Java, et il en est venu à ma tête.
Merci pour toutes ces réponses! Je suis juste en train de rapidement demandais si je devais "analyser" big-oh la mémoire de chaque code, seraient-ils tous deux être considérés comme O(1) ou serait-ce une erreur de croire?