Sumário: java.lang.String; - Maneiras de criar Objetos String,Pool de literais,Comparação entre Strings, Concatenação
A classe String se encontra nos pacotes padrões de java(Oque te da a habilidade de em uma forma implicita usar a Classe) e de ta a habilidade de armazenar uma sequencia de caracteres(Toda essa representação deve ficar entre aspas duplas - > "caracteres").Veja que String é um tipo referência tanto que o primeiro S de String é maiúsculo.
É importantíssimo saber:
char - É a representação de um caracter somente, em aspas simples ' '
String - É a representação de um ou mais caracteres, em aspas duplas " "
Como Declarar um Objeto String?
Temos 2 maneiras:
1- Usando new String myVariable = new String("test");
Quando você faz essa declaração você , cria 2 objetos String em memória e coloca os caracteres em uma area reservada na heap para Literais que é chamada de Literal pool.
2- Sem usar a keyword new, A classe String é um tipo diferente em java, a única classe que aceita ser instanciada sem usar new:
String myVariable = "test";
ou
String myVariable = ("test");
Quando você faz essa declaração você, cria 1 objeto String em memória e coloca os caracteres em uma area reservada na heap para Literais que é chamada de Literal pool(Isso se os caracteres ja não existirem no Literal Pool), Para evitar a duplicação desnecessária de objeto String em memória , crie objetos String sem a keyword new.
Oque é esse Pool de literais?
Vamos a um exemplo, Esse exemplo serve tanto para Variaveis de referência Local quanto para variáveis de referência Atributo, toda variável do tipo String tem uma variável atributo chamada(Comparador de valor C) que tem o endereço de memória dos caracteres no Pool de literais: - A classe String mantem um POOL DE LITERAIS -
public class MinhaClasse{
public static void main(String[] array){
String minhaVariavel = "test"; //Instanciei um objeto String com a representação em
//caracteres
}
}
Teremos a representação somente da Local Variable referente ao frame de main() e a Heap referente a arquitetura da instância da Jvm operando sobre esse Class File,
Vejamos oque acabamos de fazer:
Clique na imagem para ampliar
E se eu tiver outra String com o mesmo valor de caracteres?
Então temos somente uma representação no Pool de literais de representação de caracteres(Isso somente acontence se instanciarmos o objeto String sem a keyword new):- A classe String mantem um POOL DE LITERAIS - Se uma String literal ja existe no Pool então uma referência para o Pool será o endereço da Referência ao Comparador, Isso para Strings sem o uso da keyword new e com a mesma sequência de caracteres e ordem
public class MinhaClasse{
public static void main(String[] array){
String minhaVariavel = "test";
String minhaVariavel2 = "test";
}
}
Clique na imagem para ampliar,Toda vez que você cria um literal String a jvm checa o pool de Literal primeiro, se a string não existir no pool de literal então é colocado no pool a nova representação(Isso sem usar a keyword new).
Mais exemplo:
public class MinhaClasse{
public static void main(String[] array){
String minhaVariavel = "test";
String minhaVariavel2 = "gol";
}
}
Vejamos oque aconteceu:
Clique na imagem para ampliar,A manipulação é feita por um algoritmo da Classe.
E com a keyword new?
Objetos String com a keyword new, não se referem a objetos na Pool de literais porem pode ser feito com o método da classe String intern().
public class MinhaClasse{
public static void main(String[] array){
String minhaVariavel = "test";
String minhaVariavel2 = new String("test");
}
}
Vejamos oque aconteceu:
Clique na imagem para ampliar,A manipulação é feita por um algoritmo da Classe.
Comparação entre String:
Temos 2 maneiras básicas de comparação:
1- o sinal de igual(Operador == )
2- o método equals()
O operador == (igual):
Avalia o endereço de memória das Strings dentro do comparador de valor C, vamos a um exemplo:
Instanciando um Objeto String sem a keyword new:
public class MinhaClasse{
public static void main(String[] array){
String minhaVariavel = "test";
String minhaVariavel2 = "test";
}
}
minhaVariavel == minhaVariavel2 ?
Sim a resposta é true, vejamos o porque:
Clique na imagem para ampliar,Perceba que o teste é feito no Comparador de valor C, Agora me responde você, 0xA2 = 0xA2?
Instanciando um objeto String com a keyword new:
public class MinhaClasse{
public static void main(String[] array){
String minhaVariavel = "test";
String minhaVariavel2 = new String("test");
}
}
minhaVariavel == minhaVariavel2 ?
Não a resposta é false, vejamos o porque:
Clique na imagem para ampliar,Perceba que o teste é feito no Comparador de valor C, Agora me responde você, 0xA2 = 0xA3?
Usando o método equals():
Retorna true se ambos tem o mesmo conteudo, ou seja a mesma sequência e ordem de caracteres.
Instanciando um Objeto String sem a keyword new:
public class MinhaClasse{
public static void main(String[] array){
String minhaVariavel = "test";
String minhaVariavel2 = "test";
}
}
minhaVariavel.equals(minhaVariavel2)?
Sim a resposta é true, os caracteres "test" nessa sequência e ordem são iguais a esse: "test"? Sim claro.
Instanciando um objeto String com a keyword new:
public static void main(String[] array){
String minhaVariavel = "test";
String minhaVariavel2 = new String("test");
}
}
minhaVariavel.equals(minhaVariavel2)?
Sim a resposta é true, os caracteres "test" nessa sequência e ordem são iguais a esse: "test" ? Sim claro.
Concatenação de String:
O operador(+ somar) é usado para concatenar Strings, veja o exemplo:
String myVariable = "He";
String myVariable1 = "llo";
String myVariable2 = myVariable + myVariable1;
Qual o valor de myVariable2?
"Hello"!!!
Convertendo String em Tipos Primitivos:
Se você quer converter um objeto String em tipos Primitivos pode usar uma classe associada com o tipo primitivo. Cada tipo primitivo tem uma classe associada com ela:
double - > Double
int - > Integer
etc
*Veja que Classes começam com letra maiúscula
E todas essas Classes tem método utilitários que fazem essa conversão, exemplo:
String d = "2";
double variable = Double.parseDouble(d);
Agora variable vale 2.0
É hora da revisão:
- Temos 2 maneiras de se instanciar objetos String, Usando a keyword new ou não usando
- Toda vez que instanciamos um objeto String sem a keyword new, mantemos a representação de caracteres dentro de um pool, onde ela não sera duplicada se ja tiver uma representação em igual ordem e representação
- Se instanciar objeto String com a keyword new, mesmo que ja haja a representação no pool em ordem e sequência mesmo assim sera duplicada a sequência(gasto de memória)
- O operador ==(igual) avalia endereços de memória, o método equals() avalia o conteúdo dos objetos
- Concatenação é a junção do conteúdo de uma String com o conteúdo de outra
- É importantíssimo saber:
char - É a representação de um caracter somente, em aspas simples ' '
String - É a representação de um ou mais caracteres, em aspas duplas " "
- Todo objeto String pode ser convertido em um numero literal ou um caracter(char), usando a classe associada ao tipo literal
Próximo post Operadores Relacionais, Condicionais e Controle de fluxo!!!
Cya DUDES!!!
sábado, 5 de setembro de 2009
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário