GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

O que é uma String?

Em português
http://pt.wikipedia.org/wiki/String

Em inglês (mais completo)
http://en.wikipedia.org/wiki/String_%28computer_science%29

Dê uma olhda nisso aqui, também:
http://www.guj.com.br/java.tutorial.artigo.103.1.guj

Falow!

Strings em Java são objetos que contém uma cadeia de caracteres. São imutáveis, portanto uma vez criadas não podem ser alteradas. Caso ocorra uma concatenação de Strings, um novo objeto é criado, e o antigo, automaticamente removido. Para consultar caracteres pelo índice utilize o método charAt ().

[quote]pelo amor de Deus !!!
que pergunta !!! [/quote]
lol
te garanto que tu nao nasceu sabendo…
aqui é um forum para java básico entao… string é o basico do java, dexa o cara perguntar…
:slight_smile:

2 Curtidas

Quem nasce sabendo tudo é jacaré - pena que ele também não aprende nada.

1 Curtida

String cabe discussão d+!!!
muitas correntes filosóficas.

Dica inútil minha: Você vai entender a magnitude da invenção da classe String quando você usar char[] em C. Ou treinar bastante o core do java.

Lembra do strcpy(), strcat() ???

Estamos no tópico BÁSICO e O QUE É STRING? é uma pergunta Básica :smiley:

Alguém discorda disso?!!! a pergunta do cara é relevante!

abraço!

String nome = “Jaison”; :slight_smile:

[quote=chicocx]pelo amor de Deus !!!
que pergunta !!![/quote]

Pelo que sei o intuito de uma lista de discussão é esclarecer dúvidas por mais que para alguns a resposta seja óbvia, mas para o rapaz não era…então ao invés de criticar passe a ele o que você sabe.

Até mais

Patty

2 Curtidas

Seu nome podia ser “Dieizoum” de uma vez… kkkkkk
abraços!

O sABI PASSA SUA SABEDORIA… SEM A SABEDORIA O MUNDO Ñ VAI P/ FRENTE… POR ISSO QUE O MUNDO ESTA DO JEITO QUE ESTA… POR PESSOAS COMO “VCS”, CRITICA O PROXIMO…

Em programação e em linguagens formais, uma cadeia de caracteres (também conhecida como string) é uma sequência ordenada de caracteres (símbolos) escolhidos a partir de um conjunto pré-determinado. Em programação, cada símbolo armazenado na memória é representado por um valor numérico. Uma variável declarada com tipo de dado cadeia geralmente armazena um número pré-determinado de caracteres.

Na teoria seria impossivel, mas na pratica muito facil…

se não haver duvidas pra q serveriam os forum rssssss

fiz processamento de dados rsss !!!

mas esqueci quase tudo. possei aki pra relembrar oq é uma string.

rssss fui… kambio desligo :wink:

Um caracter é um conjunto de bytes que representa um dígito, seja ele letra, número ou símbolo especial.
Por exemplo, são caracteres válidos: a, e, ç, µ ou 4.

Para escrever um texto, mais de um caracter é necessário. Na programação, precisamos representar essa cadeia de caracteres de alguma forma. A palavra “cadeia” em inglês é “string”.

Ok, esse é o conceito: string são um bando de caracteres juntos. Agora, vamos falar das implementações desse conceito. Como representar um conjunto de caracteres numa linguagem?

No C, a idéia óbvia foi usar um array. A idéia básica é simples: arrays representam um conjunto de dados relacionados, que podem ser acessados por um índice. Uma cadeia de caracteres é um conjunto desses, logo, basta usar arrays para representar os caracteres. Como a cadeia pode ter um tamanho arbitrário, usaram o caracter de valor 0 para representar o fim da cadeia. Portanto, “Vinícius”, em C, é um array de 9 posições, contendo:

char nome = {"V", "i", "n", "í", "c", "i", "u", "s", 0};

Essa abordagem era pouco prática, e muito pouco eficiente. Para se determinar o tamanho da string, era necessário varrer a string toda e descobrir onde o 0 estava. Como praticamente todas as operações de string envolvem conhecer o seu tamanho, o impacto negativo de uma função de tamanho lenta ficou evidente logo de cara. E, nesse caso, quanto maior a String, mais lenta se torna a função.

A implementação também esbarrou em outro problema: internacionalização. Logo viram que um byte por caracter era insuficiente para representar todos os dígitos presentes no mundo. Novas tabelas e modos de codificação foram criados (como o Unicode). E, portanto, mais informações precisavam estar associadas a uma cadeia de caracteres para que ela se tornasse relevante. De fato, graças a isso, contar quantos caracteres uma String tem se tornou uma tarefa desafiadora, até mesmo em Java, mas esse é assunto para outra discussão.

Pois bem, vieram as classes e a solução lógica foi deixar o array de lado e representar a String através de uma classe. Assim, poderiamos colocar o array com os caracteres num canto, o tamanho em outro e o tipo de codificação em outro, tudo isso encapsulado na parte interna de nossa classe. O C++ introduziu a string na sua biblioteca padrão, a STL, e é a classe std::string. Por armazenar o tamanho do string, esse é um exemplo clássico onde o código OO fica muito mais rápido do que o seu representante estruturado.

O C++ permite que qualquer objeto seja tornado imutável através da palavra const. Porém, isso não é possível em java. Então, os projetistas da linguagem decidiram que, além de ser uma classe, essa classe seria imutável. Ou seja, a classe teria gets, mas não sets. Alterações seriam feitas em um outro objeto, mas não no objeto original. Por que isso?

Considere o que ocorreria com esse código, caso não fosse assim:

[code]public class Pessoa {
public String nome;

public Pessoa(String nome) {
if (nome == null || nome.isEmpty())
throw new IllegalArgumentException(“Nome inválido!”);
this.nome = nome;
}

public String getNome() {
return nome;
}
}[/code]

Esse código não seria seguro se a String não fosse imutável. O usuário do código poderia inserir um nome vazio simplesmente fazendo:

Pessoa p = new Pessoa("Vinicius");
//o usuário alterou o objeto nome diretamente, portanto, não passou pela verificação de vazio da nossa classe.
p.getNome().set(""); 

Notem que esse erro de modelagem é comum entre programadores menos experientes. Embora a classe String seja imutável, várias outras classes (como as de collections), não são.

Outras vantagens da imutabilidade é o fato dela ser inerentemente thread-safe. De fato, você pode ler mais sobre esse assunto específico nesse ótimo artigo do Goetz:

No caso do java, mesmo que usemos o método concat, estamos gerando uma nova String:

//concat retorna a String Vinícius Godoy, mas o nome, dentro da //classe Pessoa, permanece inalterado. p.getNome().concat(" Godoy");

Nem sempre desejamos a imutabilidade. Quando vamos concatenar várias coisas para gerar um texto, a criação de novas Strings pode ter uma péssima performance (já que vários objetos intermediários serão criados). É nesses casos, que recorremos a classe StringBuilder que, nada mais é, do que uma versão mutável do String. Nesse caso, usamos a mutabilidade só onde é realmente necessária, e na minoria dos casos.

Bom… ainda no C, notaram que diversas Strings são estáticas e estão presentes no código fonte (usando a declaração com aspas “”). Além disso, notaram que essas strings muitas vezes se repetiam, não eram alteradas e, portanto, poderiam economizar espaço em seu armazenamento. Por exemplo, considere as strings: banana, ana, na, nana.

Todas elas poderiam ser alocadas apenas 1 vez, e essa alocação poderia ser compartilhada entre todos os processos daquele programa. Portanto, a maior parte das linguagens cria o que chamamos de pool de strings. Basicamente, o compilador faz uma varredura de todas as String “hard coded” e gera uma área separada para elas, imutável, sem repetições e que pode ser reaproveitada por vários processos.

O java também faz isso. Por isso, podemos comparar com == Strings que são criadas com aspas, já que se referem ao mesmo objeto:

[code]String x = “Vinicius”;
String y = “Vinícius”;

System.out.println(x == y); //Retorna true![/code]

Mas não podemos comparar assim strings vindas de outros meios:

String x = scanner.nextLine(); //Usuário digita Vinícius String y = scanner.nextLine(); //Usuário digita novamente Vinícius System.out.println(x == y); //Retorna false!

Ou criadas explicitamente com o new (nesse caso, estamos pedindo ao java que não utilize o pool).

String x = new String("Vinícius"); String y = new String("Vinícius"); System.out.println(x == y); //Retorna false!

Por isso, para comparar o conteúdo de duas String, usamos o método equals. Ele sim, analisará cada caracter dentro da String, ao invés de simplesmente olhar para a posição de memória que a String ocupa (como faz o ==).

Se faltou alguma coisa, ou falei alguma besteira, por favor, me corrijam ou complementem. E qualquer dúvida, é só perguntar.

1 Curtida

estou utilizando o livro da Deitel 6º edição… e to com uma duvida, o q é uma String… essa pergunta é um tanto perturbadora pq era pra eu jah tah sabendo… na verdade a minha duvida eh pra que qui ela serve… ???

//