Lo + Leído
Eventos destacados
Artículos para tus primeros pasos
Si estás empezando a introducirte en el mundo de Groovy y Grails, no te pierdas nuestros artículos básicos:
- Introducción a Groovy, parte 1 (Andrés Almiray)
- Introducción a Groovy, parte 2 (Andrés Almiray)
- Introducción a Groovy, parte 3 (Andrés Almiray)
- Introducción a Grails (Material Seminario ImaginaWorks)
Los protagonistas te cuentan de qué van los proyectos más importantes del mundo Groovy:
Groovy: primeros pasos
sobrecarga de operadores y referencias de memoria
jsanca - viernes 09/01/2009Según entiendo, Groovy sobrecarga el operador ==, para realizar el equal
Por ejemplo,
def s1 = "Hola"
def s2 = "Hola"
s1 == s2 // en Java s1.equals(s2)
Hasta aqui todo bien, pero mi pregunta va, a como puedo hacer en groovy para realizar la comparacion de referencia, es decir determinar o comparar si el objeto actual es el mismo al que estoy comparando, osea en java:
String s1 = "Hola";
String s2 = s1;
if (s1 == s2) // true
Como ven esta funcionalidad se pierde en Groovy (al menos eso creo) por la sobrecarga de operadores, alguién sabe si existe otra manera de hacer la comparación de referencias?
Gracias
Re: sobrecarga de operadores y referencias de memoria
jsanca - lunes 12/01/2009Gracias por tu respuesta, por alguna razón el sitio se cayo varias veces cuando hice el post.
Como refresque en varias ocasiones el post, esperando respuesta, el mismo se publico 4 veces, si alguien puede eliminar el resto menos este!
Gracias de antemano!
Re: sobrecarga de operadores y referencias de memoria
idecasso - martes 13/01/2009De nada, por si no quedo claro, el metodo se llama is y se le pasa como referencia el otro objeto:
miObjeto.is(otroObjeto)
Aunque revise el ejemplo que puse, con el JDK de Sun en Ubuntu, me dio true enlos casos que puse, por que al parecer las constantes de String, me imagino que de los tipos primitivos, se comparten, por lo cual tienen la misma direccion de memoria, pero segun lei eso puede cambiar dependiendo la implementacion de la JRE :P Un poco latoso el asunto. Y el metodo is al parecer invoca a hashCode :P pero para otros objetos debe ser valido utilizarlo para saber si estan en la misma direccion de memoria.
Hay que checar un poco mas, pero me imagino que con lo actual puedes trabajar. De los mensajes repetidos, ya hemos comentado eso, tiene un tiempo sucediendo esto, antes no pasaba, fue despues de un cambio en la web, me imagino que despues lo van a corregir.
Re: sobrecarga de operadores y referencias de memoria
idecasso - martes 13/01/2009Re: sobrecarga de operadores y referencias de memoria
idecasso - martes 13/01/2009No, me volvio a salir el mensaje :P bueno, sigamos:
En este momento estamos trabajando para mejorar el servicio. Sentimos las molestias.
ImaginaWorks: info@imaginaworks.com
Re: sobrecarga de operadores y referencias de memoria
idecasso - martes 13/01/2009Volviendo a hacer la prueba, pero con otras clases, ya no con Strings ni con nada que tenga que ver con tipos primitivos(int, float, boolean, etc), hice la prueba con listas:
def f1 = []
def f2 = []
println f1 == f2
println f2 == f1
println f1.is(f2)
println f2.is(f1)
println f1.is(f1)
println f2.is(f2)
Siendo la salida:
true //s1 igual a s2
true //s2 iguala s1
false //s1 es s2
false // s2 es s1
true // s1 es s1
true // s2 es s2
Re: sobrecarga de operadores y referencias de memoria
idecasso - martes 13/01/2009Volviendo a hacer la prueba, pero con otras clases, ya no con Strings ni con nada que tenga que ver con tipos primitivos(int, float, boolean, etc), hice la prueba con listas:
def f1 = []
def f2 = []
println f1 == f2
println f2 == f1
println f1.is(f2)
println f2.is(f1)
println f1.is(f1)
println f2.is(f2)
Siendo la salida:
true //s1 igual a s2
true //s2 iguala s1
false //s1 es s2
false // s2 es s1
true // s1 es s1
true // s2 es s2
Re: sobrecarga de operadores y referencias de memoria
idecasso - martes 13/01/2009Volviendo a hacer la prueba, pero con otras clases, ya no con Strings ni con nada que tenga que ver con tipos primitivos(int, float, boolean, etc), hice la prueba con listas:
def f1 = []
def f2 = []
println f1 == f2
println f2 == f1
println f1.is(f2)
println f2.is(f1)
println f1.is(f1)
println f2.is(f2)
Siendo la salida:
true //s1 igual a s2
true //s2 iguala s1
false //s1 es s2
false // s2 es s1
true // s1 es s1
true // s2 es s2
Re: sobrecarga de operadores y referencias de memoria
idecasso - martes 13/01/2009Volviendo a hacer la prueba, pero con otras clases, ya no con Strings ni con nada que tenga que ver con tipos primitivos(int, float, boolean, etc), hice la prueba con listas:
def f1 = []
def f2 = []
println f1 == f2
println f2 == f1
println f1.is(f2)
println f2.is(f1)
println f1.is(f1)
println f2.is(f2)
Siendo la salida:
true //s1 igual a s2
true //s2 iguala s1
false //s1 es s2
false // s2 es s1
true // s1 es s1
true // s2 es s2
Re: sobrecarga de operadores y referencias de memoria
idecasso - martes 13/01/2009Volviendo a hacer la prueba, pero con otras clases, ya no con Strings ni con nada que tenga que ver con tipos primitivos(int, float, boolean, etc), hice la prueba con listas:
def f1 = []
def f2 = []
println f1 == f2
println f2 == f1
println f1.is(f2)
println f2.is(f1)
println f1.is(f1)
println f2.is(f2)
Siendo la salida:
true //s1 igual a s2
true //s2 iguala s1
false //s1 es s2
false // s2 es s1
true // s1 es s1
true // s2 es s2
Re: sobrecarga de operadores y referencias de memoria
idecasso - martes 13/01/2009Volviendo a hacer la prueba, pero con otras clases, ya no con Strings ni con nada que tenga que ver con tipos primitivos(int, float, boolean, etc), hice la prueba con listas:
def f1 = []
def f2 = []
println f1 == f2
println f2 == f1
println f1.is(f2)
println f2.is(f1)
println f1.is(f1)
println f2.is(f2)
Siendo la salida:
true //s1 igual a s2
true //s2 iguala s1
false //s1 es s2
false // s2 es s1
true // s1 es s1
true // s2 es s2
Un momento...
Re: sobrecarga de operadores y referencias de memoria
idecasso - sábado 10/01/2009es facil, aunque no es un operador, es un metodo:
def s1 = "Hola"
def s2 = "Hola"
s1.is(s2)
String s1 = "Hola"
String s2 = s1
if (s1.is(s2)) // true
Lo cual quiere decir, s1 es s2 ? :P