No. Sono sono la stessa cosa: l'operatore + per le stringhe comporta la creazione, ogni volta, di un nuovo oggetto String.
Richiamare il costruttore di String, invece, permette alla JVM di creare un solo oggetto String che, internamente, contiene tutti i byte della tua stringa.
Giusto per aggiungere informazioni, questo è quello che viene fatto dalla classe String passando un array di byte (codice originale Sun):
codice:
public String(byte ascii[], int hibyte, int offset, int count) {
checkBounds(ascii, offset, count); // Controlla che l'array non sia vuoto e che i limiti siano corretti.
char value[] = new char[count];
this.count = count;
this.value = value;
if (hibyte == 0) {
for (int i = count ; i-- > 0 ;) {
value[i] = (char) (ascii[i + offset] & 0xff);
}
} else {
hibyte <<= 8;
for (int i = count ; i-- > 0 ;) {
value[i] = (char) (hibyte | (ascii[i + offset] & 0xff));
}
}
}
...
public String(byte bytes[]) {
this(bytes, 0, bytes.length);
}
Ciao.