Ver Mensaje Individual
  #8 (permalink)  
Antiguo 09/12/2011, 09:09
Avatar de Xerelo
Xerelo
 
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: 2 objetos String!

Cita:
eferente a lo que dices que cuando lo creas de forma implicita son primitivas y no objetos entonces vamos a tener que aprender de nuevo java o tendre que empezar a escribir cartas a profesores,libros y editoriales para corregir dicho error, sigo java desde videotutoriales, y libros que se venden en todo el mundo y en ellos siempre afirman que String no es primitivo, no existe primitivo para String, String es una clase y a su vez objeto que ayuda a trabajar con cadena, a ver si tengo un momento y te voy a hace un copy-paste de un libro en el que dice lo que yo escribi en el post pero supuestamente deberia de dar negativo y no es asi, no se si me explico.
Bla bla bla bla

Ya que estamos haciendo un concurso de egos, me pondré a tu nivel

Si te fijas, todas las veces que he puesto primitiva, lo he hecho con comillas. Eso es por algo (Opción c).

La forma de crear las String como String variable = "valor" se llama literal, no implícita. Lo de llamarlas "primitiva" fue por no confundirte con términos que seguramente no conocías.

Tal y como te había contado, cuando se crea una String de forma literal este pasa a la "piscina de strings", si creas una nueva referencia de forma literal a una cadena que ya está en la piscina, le asigna la misma posición de memoria, por eso con == sale como verdadera. Cuando la creas como objeto, como dice Ronruby, va al heap, y entonces la cadena de la "piscina" y la del heap ya no se consideran iguales.

Cita:
Iniciado por
String n1="hola";
String n2= new String(2hola");
if (n1==n2) // aqui tambien da falso y supuestamente me dices estoy comparando un String objeto con String primitiva.
Cita:
Iniciado por Yo
Sin embargo si creas esa misma String de otra forma, para java es un objeto nuevo, y así lo identifica.
Si hubieses tratado de entender lo que te explicaba, sabrías que evidentemente el resultado es falso. Porque está claro que un literal y un constructor, no son la misma forma.

http://www3.ntu.edu.sg/home/ehchua/p...3d_String.html

Así que ahórrate el hacerme copy-pastes, reescribir libros y hablar con profesores, que yo sí sé por qué pasa.

Y dudo mucho que hayas visto en ningún sitio que una comparación entre literales da falso, ya que precisamente es el problema de los que empiezan en java, sus primeras comparaciones son con literales y luego piensan que == es una forma válida de comparar Strings.

Disfruta de tu soberbia.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.