Vamos a través de él:
SomeObject so1 = new SomeObject("some property value");
... En realidad, es más complicado de lo que parece, porque va a crear una nueva cadena. Puede ser que sea más fácil pensar en como:
String tmp = new String("some property value");
SomeObject so1 = new SomeObject(tmp);
// Not that you would normally write it in this way.
(Para ser absolutamente exacto - estos no son realmente equivalentes En el original se crea la 'nueva cadena' en tiempo de compilación y es parte de la imagen .class.. Puede pensar en esto como un hack de rendimiento.)
Por lo tanto, primero la JVM asigna espacio para la cadena. Por lo general, no conoce ni se preocupa por los aspectos internos de la implementación de String, así que confíe en que se está utilizando un trozo de memoria para representar "algún valor de propiedad". Además, tiene algo de memoria asignada temporalmente que contiene una referencia a la Cadena. En la segunda forma, se llama explícitamente tmp
; en su forma original, Java lo maneja sin nombrarlo.
A continuación, la JVM asigna espacio para un nuevo SomeObject. Eso es un poco de espacio para la contabilidad interna de Java y espacio para cada uno de los campos del objeto. En este caso, solo hay un campo, strSomeProperty
.
Tenga en cuenta que strSomeProperty
es solo una referencia a una Cadena. Por ahora, se inicializará a nulo.
A continuación, se ejecuta el constructor.
this.strSomeProperty = strSomeProperty;
Todo esto hace es copiar la referenciaa la cadena, en su campo de strSomeProperty
.
Finalmente, se asigna espacio para la referencia de objeto so1
. Esto se establece con una referencia al SomeObject.
so2
funciona exactamente de la misma manera.
No, no es más complicado de lo que parece. "a" y una nueva cadena ("a") no son expresiones equivalentes. Los literales de cadena son internados por el compilador. No incurren en asignaciones de montón adicionales cuando se utilizan. – bendin
http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.10.5 – bendin
Touche :) Sin embargo, creo que la internación es conceptualmente aún más complicada de lo que describí. Supongo que la respuesta adecuada depende de la intención de la pregunta. – slim