2008-12-03 10 views
5

vi esta frase en algunos matrials:variables simples en Java y C++

"En Java, los tipos de datos simples como int y carbón operan igual que en C"

Me pregunto que en realidad son diferentes en Java & C++?

En C++, las variables simples, como los primitivos en Java se les asigna una dirección de memoria, así, por lo que estos tipos primitivos en C++ puede tener un puntero también. Sin embargo, las primitivas en Java no tienen asignada una dirección de memoria como son los Objetos.

¿Es correcto?

Gracias!

+0

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

Respuesta

7

Casi.

En primitivos de Java se asignan memoria, así, pero esto sucede internamente y no se puede obtener la referencia.

La razón era proporcionar seguridad en la administración de la memoria.

-1

Las primitivas se almacenan en la pila y se pasan por valor.

int x = 5; 
int y = x; 

y++; 

// y = 6 
// x = 5 

Los objetos se almacenan en el montón y se pasan por referencia.

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

b.someAction(); 

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

no tengo idea de si esto es lo que su pregunta, pero estoy aburrido y quiero publicar algo

+0

¿No tiene esto al revés? Los primitivos se asignan en la pila, pensé. – bradtgmurray

+0

¡Ja ja! Sí. Editado –

+0

Los objetos no se pasan por referencia. Las referencias a objetos se pasan por valor. Ver http://stackoverflow.com/questions/333151. Además, las primitivas solo se almacenan en la pila si son variables locales. –

0

Hay algunas diferencias entre Java y C++ cuando se trata de tipos simples . La asignación de memoria es diferente ya que Java oculta el concepto de punteros y referencias explícitos. Simplemente crea el tipo simple y asigne un valor. Otra diferencia es que Java usa huellas de memoria estandarizadas para cada verificación de tipo simple Java Simple Types. C++, por otro lado, depende de la plataforma en la que se compila. Otro punto (y no sé si es una diferencia o no) es que la asignación en tipos simples es hilo seguro. No he hecho ninguna programación multiproceso en C++, así que no estoy seguro de si esto es una consideración.

+0

La asignación a largo o doble puede no ser atómica a menos que sea volátil (e incluso entonces la implementación probablemente esté rota). El cambio no es necesariamente visible automáticamente para otros hilos (a menos que sean volátiles). Operaciones tales como ++ no son atómicas: use AtomicInteger y sus amigos. –

0

Para la mayoría de las cosas básicas, funcionan igual, pero hay un montón de diferencias de detalles.

  • No hay tipos numéricos sin signo en Java (excepto carbón, que técnicamente pero no semánticamente numérica)
  • "tipos primitivos" de Java sólo puede vivir en la pila (como variables locales) o dentro de los objetos en el montón , pero no directamente en el montón.
  • El tipo char es muy diferente - en C, se define para contener un byte (byte puede o no puede tener 8 bits), mientras que en Java, se define para ser de 16 bits.
0

correcta.

en Java no se puede pasar una referencia (puntero) a un tipo primitivo. // De hecho, no hay punteros en Java.

Un tipo primitivo solo se puede pasar por valor en Java. Hay una forma de evitarlo, pero generalmente no se recomienda a menos que su situación así lo exija. Puede usar una clase contenedora. When to use wrapper class and primitive type

Solo los objetos que se pasan son por referencia.

También los tipos primitivos se asignan en la pila y los objetos se asignan en el montón.