Em Java, os parâmetros são passados por referência ou por valor?
Olá a todos! Comecei a estudar Java agora e me deparei com uma confusão. Nos livros dizem que em Java tudo é passado por valor, mas na prática vejo algo estranho.
Aqui está um exemplo. Quando passo um objeto (por exemplo, uma lista) para um método e o modifico dentro do método, as alterações persistem após a saída do método:
```java
public class Test {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
changeString(sb);
System.out.println(sb); // Saída: Hello World
}
public static void changeString(StringBuilder s) {
s.append(" World");
}
}
```
Aqui, sb foi alterado. Eu pensei que, se fosse passada uma cópia, as alterações deveriam ser locais. Então, objetos são passados por referência?
Mas se eu tentar atribuir um novo objeto dentro do método, isso não se reflete externamente:
```java
public class Test {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");