¿En Java los parámetros se pasan por referencia o por valor?
¡Hola a todos! Acabo de empezar a estudiar Java y me encontré con una confusión. En los libros escriben que en Java todo se pasa por valor, pero en la práctica veo algo extraño.
Aquí hay un ejemplo. Cuando paso un objeto (por ejemplo, una lista) a un método y lo modifico dentro del método, los cambios se conservan incluso después de salir del método:
```java
public class Test {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
changeString(sb);
System.out.println(sb); // Salida: Hello World
}
public static void changeString(StringBuilder s) {
s.append(" World");
}
}
```
Aquí sb cambió. Pensé que si se pasa una copia, los cambios deberían ser locales. ¿Entonces los objetos se pasan por referencia?
Pero si intento asignar un nuevo objeto dentro del método, esto no se refleja fuera:
```java
public class Test {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");