Foros del Web » Programación para mayores de 30 ;) » Java »

no entiendo la creacion de objetos!

Estas en el tema de no entiendo la creacion de objetos! en el foro de Java en Foros del Web. Hola amigos, bueno estoy estudiando java y aunque ya estoy en un par de semans aun no tengo los conceptos claros, y he notado que ...
  #1 (permalink)  
Antiguo 11/05/2010, 20:17
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
no entiendo la creacion de objetos!

Hola amigos, bueno estoy estudiando java y aunque ya estoy en un par de semans aun no tengo los conceptos claros, y he notado que mi avance es lento por no entender estos concepto.

Bien en c

string s; //es una variable

y en java es una referencia.

ahora string s = new string("adfs");
entonces lo que se creo es un objeto, y es ahi donde esta mi confusion porque la variable sigue siendo s, y no veo utilidad a que se haga todo ese proceso de
string s = new string("adfs")
si con string s = "adfs" se consigue lo mismo.

Me pueden explicar?
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #2 (permalink)  
Antiguo 11/05/2010, 21:19
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: no entiendo la creacion de objetos!

Efectivamente, no tiene utilidad, de hecho, es menos eficiente.

En ambos casos se crea un objeto String con ese contenido "adfs", las dos formas son totalmente equivalentes y hacen lo mismo.

La única diferencia es que el compilador es listo y si haces esto

Código:
String s = "adfs";
String p = "adfs";
el compilador es capaz de detectar que la cadena es la misma y sólo creará un objeto String con "adfs", de forma que s y p "comparten" el String único. Sin embargo, si haces

Código:
String s = new String ("adfs");
String p = new String ("adfs");
el compilador ya no hace lo de antes, estás creando dos objetos String con el mismo contenido, uno para cada uno. Puesto que un objeto String es inmutable (no puedes cambiarle el contenido), esta forma es menos eficiente por ocupar algo más de memoria y no tiene en principio ninguna ventaja especial.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 12/05/2010, 06:46
Avatar de FiruzzZ  
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 16 años, 4 meses
Puntos: 41
Respuesta: no entiendo la creacion de objetos!

Para mi que estás mezclando muchos cosas.

Declaración de variables/objetos:
String s;
MiObjeto obj;

Inicialización de los mismos:
s = ""; <---- no todos los objetos puede ser inicializados (creados) de esta manera,creo que solo los primitivos y sus respectivos wrappers (que alguien me corrija si me estoy equivocando).
s = null;
s = new String("....");

obj <--- DEPENDE COMO HAYAS DEFINIDO UN CONSTRUCTOR PARA ESTOS (
puede ser uno por default - > obj = new MiObjeto();
puede tener atributos implícitos en su creación;
un constructor con parámetros;
etc..).

Aparte tomaste como referencia un Objeto muy especial en Java como ser String, el cual es extremadamente flexible, tiene operadores sobrecargados y la propiedad de inmutable que no es mas que una des-referencia y referencia a la nueva cadena.

Última edición por FiruzzZ; 12/05/2010 a las 07:00
  #4 (permalink)  
Antiguo 14/05/2010, 07:55
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: no entiendo la creacion de objetos!

gracas por las respuestas ahora me surgio otra XD:

chuidiang, cuando el compilador detecta que son las mismas cadenas entonces crea un objeto con dos referencias?

FiruzzZ: gracias amigo y tienes razon cogi un feo ejemplo.

Y Siguiendo con las dudas originales mi pregunta va sobre esto:

class DataOnly{
int i;
double d;
boolean b;
}

este objeto no hace nada, pero en el libro que estoy leyendo dice que se puede crear un objeto de esta clase de la forma siguiente:
DataOnly data = new DataOnly();

Mi pregunta es si con eso lo que hagos es referenciar data al metodo DataOnly y si es: ¿Sera válido esto?

data.i=54;

Pd: si esto es cierto ya no sabria entonces porque puse DataOnly como nombre original al metodo.
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #5 (permalink)  
Antiguo 14/05/2010, 09:02
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: no entiendo la creacion de objetos!

Hablas de "metodo DataOnly" y no hay ningun método con ese nombre. Como mucho lo que hay con ese "nombre" es el constructor de la clase DataOnly, y tienes que usarlo precisamente para construir objetos de esa clase.

Por otro lado, no voy a entrar en demasiado detalle pero
String s = "xxx";
y
String s = new String("xxx");

no son exactamente lo mismo para la JVM, y para ser más precisos, si hacemos

String s1 = new String("xxx");
String s2 = new String("xxx");

no se crean dos objetos con el contenido "xxx" dos veces. Pero eso ya son detalles internos de la JVM para el caso de los String y sólo interesan en casos muy muy especiales.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #6 (permalink)  
Antiguo 14/05/2010, 09:08
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: no entiendo la creacion de objetos!

Hola:

No sé si sabes C (hacer referencia a él en el primer post). Puedes entender todo esto mejor si piensas que las variables de java (excepto tipos primitivos) son todas punteros.

Así, por ejemplo,

String s;
DataOnly d;

son solo punteros o referencias que no apuntan a nada, no tienen dato dentro y cualquier llamada a un método de ellas o atributo te dará error porque están sin inicializar.

Por ello, antes de usarlas, siempre es necesario hacer un new o hacerlas apuntar a algo que ya esté inicializado

String s;
s="hola";

String s = new String("hola");

DataOnly d;
d.i; // da error, d no está inicializado
d = new DataOnly();
d.i; // ahora sí es válido.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 14/05/2010, 23:33
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: no entiendo la creacion de objetos!

GreenEyed no dije que eso existia dentro de java en ningun momento.
EN fin gracias por las respuestas, entonces ahora todo son referencias seguro que despues descubrire mejor su utilidad.

Gracias, muchas gracias.
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #8 (permalink)  
Antiguo 15/05/2010, 05:46
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: no entiendo la creacion de objetos!

Hola,
Perdona si no te entendí bien, pero como mencionabas...

Cita:
Iniciado por Copia Ver Mensaje
Mi pregunta es si con eso lo que hagos es referenciar data al metodo DataOnly y si es: ¿Sera válido esto?

data.i=54;

Pd: si esto es cierto ya no sabria entonces porque puse DataOnly como nombre original al metodo.
Pensé que creías que DataOnly era un método. Y no lo es, es un constructor que es como un método pero sin parametros de retorno y sirve para construir instancias de la clase con el mismo nombre que el constructor.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #9 (permalink)  
Antiguo 18/05/2010, 22:28
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: no entiendo la creacion de objetos!

Con esta respuesta termine de comprender :) gracias, tambien estaba confundido.
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com

Etiquetas: objetos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:50.