Strings e chars em java

Prazer para todos.
Bem, estive pesquisando com mais profundidade a classe String e o tipo char. Eu ainda tenho um pouco de dificuldades em trabalhar com Strings e char. Strings é uma classe e que é um vetor de caracteres e termina com \0 no final para indicar a última posição do vetor. Char é um tipo primitivo. Para isso é preciso pesquisar o vetor para encontrar uma letra em determinada posição, creio melhor atribuir uma variável string e também criar um objeto da classe String e depois extrair ela com o método equals ou outros métodos. Com char não é possível. A classe string tem vários construtores e métodos que facilitam. Isso tudo para não misturar com números. Assim converto em bytes, mas tenho dúvida se é convertido em um vetor de bytes ou não. Mesmo que ocupe mais espaço etc. Porque podemos ter que ler as vezes um só caractere e ter de usar a classe em vez do tipo. A mesma coisa quando usamos float ou double no java, pois sempre indicam para usar double para evitar problemas com o tipo float.

Não entendi qual é sua dúvida ou dificuldade.

É que sinto sempre dificuldades entre char e strings. Tem de ficar convertendo. Eu entendi o funcionamento, mas sempre quando tem um while que utiliza um boolean por exemplo, como s ou n para responder, nunca funciona, sempre sou forçado a usar string com equalsIgnoreCase ou equals, aí descobri em uma mensagem para criar uma nova entrada com scanner para usar somente a string. Não achei conveniente. Parece que o java não trata muito bem os chars. Ocupa menos memória e processamento que strings. Char é um tipo e string um objeto, que é tratado como um vetor.
Sanner entrada = new Scanner(System.in);
char c;
c = entrada.next().charAt(0); para eu poder ler o char.
char resp;
Ou usar um flag.
while(resposta==‘s’) || (resposta==‘S’). Desse modo o código não funciona.
Veja este post abaixo.O java trata muito mal os chars. Não é como no C++ ou pascal.
https://respostas.guj.com.br/14621-validar-a-resposta-do-usuario-somente-com-s-ou-n-em-java

Claro que funciona, só que no exemplo, o caractere digitado é armazenado na variável c

, mas vocês usa a variável resposta na comparação e não a variável c.

Além disso, tem um problema com o parênteses no while. O certo seria:

while((c == 's') || (c == 'S')){

}

Lembrando que:

1 - Estrutura de Repetição Determinada (ERD): o algoritmo apresenta previamente a quantidade de repetições.

-> for(inicalização; condição; incremento/decremento);

2 - Estruturas de Repetição Indeterminada (ERI): o algoritmo não apresenta previamente a quantidade de repetições, ou seja, não se conhece quantas iterações serão executadas.

2.1 - ERI com Validação Inicial: a verificação da condição que valida a repetição é testada no início do algoritmo. Logo, o teste resultar em falso (false), nenhuma repetição será realizada.

-> while(condição);

2.2 - ERI com Validação Final: a verificação da condição é realizada no final, depois de pelo menos uma repetição. Logo, ao menos uma repetição será executada.

-> do...while(condição);

Observação: eu sempre uso char para esse tipo de menu.

char (em minúsculo) é um tipo primitivo com magnitude de 2 bytes.
String é uma classe que encapsula um vetor de char.

String possui suas peculiaridades mas não é tratada como um vetor não.

Objetos do tipo String são imutáveis, uma vez instanciado, você não consegue alterar o conteúdo da cadeia de caracteres, se fosse puramente um vetor, você poderia alterar o conteúdo dele.

1 curtida

Agora entendi melhor, devo ter esquecido a palavra imutável. Assim vou poder melhor usar cada um no momento adequado.