Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

A String não é Imutável?

Olá!

Eu tinha entendido em aulas anteriores que um objeto String é imutável. Sendo assim, porque a variavél "linha" recebe o retorno do método "br.readLine()" e ao imprimir a linha o texto muda?

package br.com.alineri.java.io.teste;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class TesteLeitura {

    public static void main(String[] args) throws IOException {

        // Fluxo de entrada com Arquivo
        FileInputStream fis = new FileInputStream("lorem.txt");
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader br = new BufferedReader(isr);

        String linha = br.readLine();

        while (linha != null) {
            System.out.println(linha);
            linha = br.readLine();
        }

        br.close();

    }

}

Na minha cabeça, a variável "linha" tinha que ser declarada dentro do escopo do "while" e ser recriada a cada iteração, não podendo ser utilizada como condição de parada do laço.

Obrigado!

1 resposta
solução!

Olá Celso, como está?

Você está correto sim, objetos do tipo String são imutáveis, o que está acontecendo no trecho de código que você postou é que uma nova String é criada sempre que br.readLine() é chamado caso existe o que ler, o que muda é que a referência à primeira String passa a referenciar para a nova String e a antiga perde referência sendo passível de ser "garbage coletada".

Existem outras formas de leitura também, com o tempo você verá.