Comparação de char em do while

Não funciona… comparação de char. Alguma dica?

opção 1:

import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Scanner;

public class Exercicio01 {
	
	public static void main(String[] args) {
		
		Scanner teclado = new Scanner(System.in);
		
		try {
			PrintStream escrever = new PrintStream("arq.txt");
			boolean ver = true;
			do {
				System.out.println("Digite 1 caracter: ");
				char msg = teclado.next().charAt(0);
				if (msg != 0)
					escrever.println(msg);
				else
					ver = false;
			} while (ver);
			escrever.close();
		} catch (FileNotFoundException e) {
			System.out.println("Não foi possível criar o arquivo.");
		}
		teclado.close();
		
	}
}

opção 2:

import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Scanner;

public class Exercicio01 {
	
	public static void main(String[] args) {
		
		Scanner teclado = new Scanner(System.in);
		
		try {
			PrintStream escrever = new PrintStream("arq.txt");
			char msg;
			do {
				System.out.println("Digite 1 caracter: ");
				msg = teclado.next().charAt(0);
				escrever.println(msg);
			} while (msg != 0);
			escrever.close();
		} catch (FileNotFoundException e) {
			System.out.println("Não foi possível criar o arquivo.");
		}
		teclado.close();
		
	}
}

Nas duas opções o programa não sai do loop… o exercício pede:
grave diversos caracteres neste arquivo, até que o usuário entre com o caractere ‘0’.

Pessoal, foi mal criar o tópico assim, e agora achar a solução. Fui testar colocando aspas simples no caractere a ser comparado (‘0’), e funcionou. Tentei sem muita fé, e deu certo dos dois jeitos acima.
Alguém poderia me explicar que regra doida é essa? Pensava que aspas duplas e simples dava na mesma em Java. Mas aqui da diferença, já tinha tentado com aspas duplas.

Um caractere entre aspas duplas é uma String de um caractere.
Um caractere entre aspas simples é um caractere.

char c = 'O';    // ok, literal de char é entre aspas simples
String s = "O";  // ok, literal de String é entre aspas duplas

char c2 = 'OO';  // erro de compilação (dois caracteres)
String s2 = 'O'; // erro de compilação (literal de char)

char c3 = '';    // erro de compilação (não há caractere vazio)
String s3 = "";  // ok, String vazia

char c4 = "O";   // erro de compilação (literal de String)
1 curtida

Valeu!!! :grinning: