2008-12-03 11 views
5

J'ai vu cette phrase dans certains matrials:variables simples en Java et C++

« En Java, les types de données simples comme int et le charbon fonctionnent exactement comme en C. »

Je me demande qu'en fait ils sont différents en Java & C++?

En C++, des variables simples comme les primitives en Java sont également affectées à une adresse mémoire, donc ces types primitifs en C++ peuvent aussi avoir un pointeur. Cependant, les primitives en Java ne sont pas affectées d'une adresse mémoire comme les objets sont.

Ai-je raison?

Merci!

+0

Voir http://stackoverflow.com/questions/564/what-is-the-difference-between-an-int-and-an-integer-in-javac – bradtgmurray

Répondre

7

Presque.

Dans les primitives Java, la mémoire est également affectée, mais cela se produit en interne et vous ne pouvez pas obtenir la référence.

La raison était d'assurer la sécurité de la gestion de la mémoire.

-1

Les primitives sont stockées sur la pile et sont passées en valeur.

int x = 5; 
int y = x; 

y++; 

// y = 6 
// x = 5 

Les objets sont stockés sur le tas et sont passés par référence.

Object a = new Object(); 
Object b = a; 

b.someAction(); 

// A and B point to the same object and both have had the 'someAction()' performed 

Je ne sais pas si cela est ce que votre demande, mais je suis ennuyé et je souhaite poster quelque chose

+0

Vous ne l'avez pas en arrière? Les primitives sont allouées sur la pile que je pensais. – bradtgmurray

+0

Lol, oups! Ouais. Edité –

+0

Les objets ne sont pas transmis par référence. Les références d'objet sont passées par valeur. Voir http://stackoverflow.com/questions/333151. De plus, les primitives ne sont stockées dans la pile que s'il s'agit de variables locales. –

0

Il y a quelques différences entre Java et C++ en matière de types simples . L'allocation de mémoire est différente car Java cache le concept de pointeurs et de références explicites. Vous venez de créer le type simple et d'attribuer une valeur. Une autre différence est que Java utilise des empreintes mémoire standardisées pour chaque type de vérification simple Java Simple Types. D'un autre côté, C++ dépend de la plate-forme sur laquelle il est compilé. Un autre point (et je ne sais pas si c'est une différence ou non) est que l'affectation en types simples est Thread safe. Je n'ai pas fait de programmation multithread en C++ donc je ne suis pas certain si c'est une considération.

+0

L'affectation à long ou double ne peut être atomique à moins d'être volatile (et même alors, l'implémentation est probablement cassée). La modification n'est pas nécessairement automatiquement visible pour les autres threads (à moins que des modifications volatiles). Les opérations telles que ++ ne sont pas atomiques - utilisez AtomicInteger et vos amis. –

0

Pour la plupart des éléments de base, ils fonctionnent de la même manière, mais il y a une tonne de différences de détails.

  • Il n'y a pas de types numériques non signés en Java (à l'exception de l'omble, qui techniquement, mais pas sémantiquement numérique)
  • « types primitifs » de Java ne peut vivre sur la pile (comme les variables locales) ou à l'intérieur des objets sur le tas , mais pas directement sur le tas.
  • Le type char est très différent - en C, il est défini pour contenir un octet (l'octet peut avoir ou non 8 bits), alors qu'en Java, il est défini sur 16 bits.
0

Correct.

En Java, vous ne pouvez pas passer une référence (pointeur) à un type primitif. // Enfait, il n'y a pas de pointeurs en Java.

Un type primitif ne peut être transmis que par valeur en Java. Il y a un moyen de contourner le problème, mais il n'est généralement pas recommandé, sauf si votre situation l'exige. Vous pouvez utiliser une classe wrapper. When to use wrapper class and primitive type

Seuls les objets sont transmis par référence.

Les types primitifs sont également affectés à la pile et les objets sont alloués sur le tas.

Questions connexes