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ário

Quantidade de visualizações: 2473 vezes
Pergunta/Tarefa:

Escreva um programa Java que usa o método:

public String[] list()
da classe File para obter uma lista de arquivos e diretórios em um diretório informado pelo usuário. Antes de listar os arquivos seu programa deverá verificar se o caminho informado é um diretório válido.

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 Java

Quantidade 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ção

Quantidade 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 JavaScript

var 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

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware 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 funcionalidadesControle 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
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 57 usuários muito felizes estudando em nosso site.