Você está aqui: Java ::: Pacote java.lang ::: StringBuffer |
Quais as diferenças entre as classes String e StringBuffer? Quando devo substituir uma pela outra?Quantidade de visualizações: 2770 vezes |
Tanto a classe String quanto a classe StringBuffer (e seu irmão para código não sincronizado StringBuilder) facilitam nosso trabalho na hora de manipular strings. Mas, há diferenças interessantes entre estas duas classes. Vamos começar pela classe String. Um objeto String é IMUTÁVEL, ou seja, uma vez criado, seu conteúdo não pode ser modificado. Qualquer modificação ocasiona a criação de um novo objeto String. Veja o trecho de código abaixo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; public class Estudos{ public static void main(String[] args) { // criamos um objeto da classe String e usamos a variável frase para // referenciá-lo String frase = "Gosto de C e Java"; // agora a variável frase2 é uma referência ao objeto String criado anteriormente String frase2 = frase; System.exit(0); } } O que ocorre neste código é que o compilador mantém apenas um cópia do texto "Gosto de C e Java" e ambas as variáveis frase e frase2 apontam (referenciam) este texto. Veja agora: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; public class Estudos{ public static void main(String[] args) { // criamos um objeto da classe String e usamos a variável frase para // referenciá-lo String frase = "Gosto de C e Java"; // agora a variável frase2 aponta para um novo objeto String String frase2 = frase.toUpperCase(); // vamos exibir o conteúdo da variável frase System.out.println(frase); // vamos exibir o conteúdo da variável frase2 System.out.println(frase2); System.exit(0); } } Ao executarmos este código nós teremos o seguinte resultado: Gosto de C e Java GOSTO DE C E JAVA Veja que agora nós efetuamos um chamada ao método toUpperCase() do objeto frase e atribuímos o resultado à variável frase2. E aqui eu destaco bem o conceito de imutabilidade. Em vez de converter o conteúdo da string original para letras maiúsculas, o compilador criou um novo objeto String (guardando a frase em letras maiúsculas) e o atribuiu à variável frase2. Assim, baseado neste experimento, podemos concluir que todas as vezes que modificamos o conteúdo de uma String, o compilador cria um novo objeto String e descarta o anterior. A memória ocupada pelo String anterior será liberado somente após o Garbage Collector detectar os objetos sem referência e proceder com a limpeza. A classe StringBuffer (e também StringBuilder), por sua vez, é MUTÁVEL, ou seja, as modificações que fazemos em objetos desta classe são mantidas no mesmo objeto. Nenhum novo objeto é criado. Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; public class Estudos{ public static void main(String[] args) { // criamos um objeto da classe StringBuffer e usamos a variável frase para // referenciá-lo StringBuffer frase = new StringBuffer("Gosto de C e Java"); // agora a variável frase2 aponta para uma alteração no objeto StringBuffer anterior StringBuffer frase2 = frase.append(" e PHP."); // vamos exibir o conteúdo da variável frase System.out.println(frase); // vamos exibir o conteúdo da variável frase2 System.out.println(frase2); System.exit(0); } } Ao executarmos este código nós teremos o seguinte resultado: Gosto de C e Java e PHP. Gosto de C e Java e PHP. Veja que agora a alteração no conteúdo do StringBuffer foi refletida tanto na variável frase quanto frase2. |
Link para compartilhar na Internet ou com seus amigos: |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arquivos e Diretórios |
Exercícios Resolvidos de Java - Listando arquivos e diretórios em um diretório informado pelo usuárioQuantidade de visualizações: 2473 vezes |
Pergunta/Tarefa: Escreva um programa Java que usa o método: public String[] list() Sua saída deverá ser parecida com: Resposta/Solução: Veja a resolução comentada deste exercício usando Java console: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; import java.io.File; import java.util.Scanner; public class Estudos { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); // vamos solicitar que o usuário informe o diretório a ser listado System.out.print("Informe o diretório a ser listado: "); String diretorioString = entrada.nextLine(); // vamos verificar se o usuário informou um diretorio válido no sistema File diretorio = new File(diretorioString); if(!diretorio.isDirectory()){ System.out.println("O caminho informado não é um diretório válido."); } else{ // é um diretório válido...vamos listar os arquivos String lista[] = diretorio.list(); System.out.println("\nRelação de Arquivos e Diretórios:\n"); for(String item : lista){ System.out.println(item); } } System.out.println("\n"); } } |
Java ::: Dicas & Truques ::: Strings e Caracteres |
Apostila Java para iniciantes - Como substituir um caractere em uma string usando o método setCharAt() da classe StringBuffer do JavaQuantidade de visualizações: 20 vezes |
Nesta dica mostrarei como podemos usar o método setCharAt() da classe StringBuffer da linguagem Java para substituir caracteres individuais em uma palavra, frase ou texto. Veja um código completo, no qual trocamos a letra "j" por "J": ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package arquivodecodigos; public class Estudos{ public static void main(String[] args){ StringBuffer frase = new StringBuffer("Programar em java."); System.out.println(frase); frase.setCharAt(13, 'J'); // troca 'j' por 'J' System.out.println(frase); System.exit(0); } } Ao executarmos este código nós teremos o seguinte resultado: Programar em java. Programar em Java. |
Java ::: Pacote java.util ::: Iterator |
Como usar o método next() da interface Iterator do Java para obter o próximo elemento da iteraçãoQuantidade de visualizações: 3970 vezes |
O método next() da interface Iterator é usado quando queremos acessar o próximo elemento de uma iteração. Veja sua assinatura:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- E next() Veja que o tipo retornado equivale ao tipo do elemento usado na declaração do iterador. Veja um exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; import java.util.ArrayList; import java.util.Iterator; public class Estudos{ public static void main(String[] args) { // vamos criar uma ArrayList ArrayList<String> pessoas = new ArrayList(); pessoas.add("Osmar"); pessoas.add("Carlos"); pessoas.add("Fernanda"); // vamos obter um iterador para a lista Iterator<String> pessoa = pessoas.iterator(); // vamos obter o próximo elemento (neste caso, o primeiro) String s1 = pessoa.next(); System.out.println(s1); // vamos obter o próximo elemento (o segundo) String s2 = pessoa.next(); System.out.println(s2); // vamos obter o próximo elemento (o terceiro) String s3 = pessoa.next(); System.out.println(s3); // vamos obter o próximo elemento (vai dar erro. não há um quarto elemento) String s4 = pessoa.next(); System.out.println(s4); } } Ao executarmos este código nós teremos o seguinte resultado: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- Osmar Carlos Fernanda Exception in thread "main" java.util.NoSuchElementException at java.util.ArrayList$Itr.next(ArrayList.java:834) at estudos.Estudos.main(Estudos.java:30) Java Result: 1 Veja que o método next() atira uma exceção do tipo NoSuchElementException se o iterador não possuir mais elementos. |
Vamos testar seus conhecimentos em Fenômeno de Transportes e Hidráulica |
Fórmula de Hazen-Williams A fórmula de Hazen-Williams (1903) é resultado de um estudo estatístico com grande número de dados experimentais, recomendada para escoamento turbulento de transição, água a 20ºC e diâmetro maior ou igual a 50mm. Calcule o diâmetro de uma tubulação de aço (C=90), com 1.000m de comprimento e perda de carga de 51m, cuja vazão é de 200l/s. A) Aproximadamente 0,3m de diâmetro. B) Aproximadamente 0,4m de diâmetro. C) Aproximadamente 0,1m de diâmetro. D) Aproximadamente 0,5m de diâmetro. E) Aproximadamente 0,2m de diâmetro. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Python |
Qual é a forma correta de se retornar o primeiro caractere de uma string em Python? A) letra = "BRASIL".char(0) B) letra = "BRASIL"[0] C) letra = "BRASIL".substring(0, 1) D) letra = "BRASIL".sub(0, 1) E) letra = sub("BRASIL", 0, 1) Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em |
Dimensionamento de pilares de extremidade Pilares são elementos verticais cujo principal esforço normal solicitante é o de compressão. Eles podem ser classificados de acordo com sua posição na estrutura. Sobre os pilares de extremidade, assinale a alternativa correta. A) Os pilares de extremidade se situam no canto da edificação e têm descontinuidade nas duas direções. B) Nos pilares de extremidade, atuam forças normais e momentos que geram o esforço de flexão normal composta. C) Todos os pilares de extremidade são classificados como esbeltos, pois seu índice de esbeltez é acima de 200. D) Para esses pilares, não se recomenda usar o momento mínimo para determinar as solicitações atuantes. E) Esses pilares são submetidos à compressão pura, pois não têm excentricidades iniciais. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em JavaScript |
Analise o seguinte trecho de código JavaScriptvar a = new Array(); a[0] = 12; a[1] = false; a[2] = "texto"; a[3] = a; Qual destas instruções provocará um erro de execução? A) Linha 3 B) Linha 4 C) Linha 5 D) O código executa sem provocar erros Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em |
Cisalhamento e detalhamento de vigas O arranjo das armaduras de uma viga de concreto armado deve atender tanto à função estrutural quanto às condições adequadas de execução, principalmente em relação ao lançamento e ao adensamento do concreto. Uma viga de concreto C20 está sujeita a um carregamento Vd de 500kN. Essa viga tem seção igual a 25 x 60cm e altura útil de 57cm. Determine o espaçamento máximo da armadura transversal dessa viga: A) 17cm. B) 21cm. C) 25cm. D) 27cm. E) 30cm. Verificar Resposta Estudar Cards Todas as Questões |
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
Delphi - Como calcular MDC em Delphi |
Códigos Fonte |
Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |