¡¿¡¿I-lógico!?!?

jagascon
03 de Diciembre del 2003
Saludos. Desearía que alguien me ayudase o me terminase de dar por loco. Básicamente mi problema consiste en que tengo dos cadenas idénticas (Al menos eso creo) cuya comparación no es equitativa. Exactamente el código es este:

/*Estoy trabajando en un sistema Linux y quiero saber si el administrador es el que *
*está usando la aplicación */

if(System.getProperty(“user.name”)==”root”)
System.out.println(“Usted es el administrador.”);
else
System.out.println(“Usted no es el administrador”);

A mi parecer esto debería de funcionar correctamente. Pues comienzo a probarlo entrando como administrador (root) y getProperty() es diferente de “root”. Imprimo en la salida el valor devuelto por el método y resulta que es “root”, pero me sigue pasando que en la condición me toma por diferentes los términos. Almaceno en valor en una cadena para usarlo en el if y el resultado sigue siendo el mismo...
Vamos que lo he probado como he podido y me sigue sucediendo lo mismo. Por favor, que alguien me ayude, me explique qué pasa y me heche una mano que voy a volverme LoCOoo. Gracias.

gato05
03 de Diciembre del 2003
Sólo para complementar lo que los dos compañeros anteriores dicen...
Lo que devuelve el método getPropety es un Objeto tipo String y lo que tienes entre comillas(osea "root") es otro objeto String diferente(cada vez que tu escribes una cadena de caracteres entre comillas, Java crea implícitamente un objeto String ) .
Por lo tanto, cuando haces if(System.getProperty(“user.name”)==”root”), en realidad estás preguntando si el objeto String devuelto por el método System.getProperty("user.name") es el "mismo" que el objeto String "root",
lo cual siempre te dará una respuesta negativa. Es por eso que debes de hacer (System.getProperty("user.name")).equals("root").
Espero haber podido ayudar.

pjgascon
03 de Diciembre del 2003
Para hacer comparaciones de cadenas debes utilizar equals. (bye)

jamecaes
03 de Diciembre del 2003
desde cierto punto de vista lo que ud dice es cierto...
pero para compara valores primitivos...

el == compara posiciones de memoria, un valor con un valor...
cuando se trata de dos objetos el paseo es diferente y ya no se trata de dos posiciones de memoria sino de dos estructuras.
el equals entre dos objetos funciona si dos instancias son las mismas, es decir, si es el mismo objeto, por esta razon se debe usar el equals que tiene un criterio diferente para comparar objetos.

Espero haber sido de ayuda