Comparando Strings

Para comparar Strings, es recomendable usar (o más bien es lo que se debe usar) el método equals, pero es probable que nunca hayas usado una expresión como esta:



public static void main(String[] args) {
String a = "Hola";
if("".equals(a)) {
System.out.println("El String es vacío");
}
}


A decir verdad no tiene mucha gracia, sólo estamos llamando al método equals de la clase String, de un String que se encuentra entrecomillado pero esto tiene algunas ventajas, cómo por ejemplo crear un if para validar si una entrada del usuario es vacía, pero ¿Dónde está la ventaja?.

Bien si tuviesemos un String a y queremos ver que es vacío la comparación sería muy simple:




if(a.equals("") {
System.out.println("El String es vacio");
}

Pero también debemos validar que el String no sea null, ya que si por ejemplo lo estamos recuperando en un Servlet, si el parámetro no fue enviado, el String es null, entonces nuestra comparación debería quedar así:

if(a!=null && a.equals("")) {
System.out.println("El String es vacio");
}
Con está ultima modificación, asumiremos que el compilador es capaz de reconocer que si la primera condición se cumple, no ejecutará nada más y no arrojará un excepción, pero dado que eso sería asumir algo (que en realidad si lo hace así), la comparación deberá quedar algo así:

 public static void main(String[] args) {
String a = "Hola";
if(a!=null){
if(a.equals("") {
System.out.println("El String es vacío");
}
}

}
Sin embargo ese problema se puede resolver facilmente así:

public static void main(String[] args) {
String a = null;
if("".equals(a)) {
System.out.println("El String es vacío");
}
}

Copia de Arreglos

Los arreglos son una forma importante de salvar datos. En caso de que tengamos que realizar una copia de arreglos podemos realizarlo de esta manera.

public class Copy(){  
int[] array = new int[55555];
}

public int[] copyArray(){
int[] arrayCopy = new int[array.length];
for( int i = 0; i < array.length; i++ )
arrayCopy[i] = array[i];
return arrayCopy;
}


Para cada posición copiamos el valor de un arreglo al otro, esta es una manera pero existe una mejor y más sencilla. Para eso revisaremos la documentación ( API documentation ); Existe en la clase System un método llamado arraycopy.

public static native void arraycopy(Object src, int srcPos, Object dest, int destPos,int length)

Este método es nativo, por lo que la copia se hará en segmento de memoria haciendola más rápida. Este método nos da la posibilidad de copiar también segmentos del arreglo original.

System.arraycopy(array, 5, array, 0, array.length-5);

Copiando desde la posición 5 del arreglo

Bibliography:

Dactonta, Michael C; Monk, Eric; Keller Paul, Java Pitfalls, Wiley 2000;