Porque as vezes comparação de string naum funciona?

20 respostas
I

Porque as vezes isso naum funca:

if (str == "oi como vai) { }
as vezes sim as vezes naum

ei sei q tem aquela do compare, algo como

if (str.compareToIgnoreCase("oi como vai") { }
mas so queria saber se esse método ( str == “”) é adequado.

20 Respostas

R

Compare String e outro objetos com o método equals().

I

naum entendi :roll:

R

‘==’ é usado para comparação de tipos primitivos, quando você faz isso com objetos, está comparando seu endereço na memória e não seu conteúdo. Para comparar o conteúdo de dois objetos, utilize o método equals da classe Object:

String a = "blablabla"; String b = "blablabla"; if(a.equals(b)) ...

K

Vc está comparando os objetos, não os valores, entendeu?

L

String não é um tipo primitivo, é um objeto especialmente construido

sempre que vc quiser comparar o valor de um objeto vc deve usar o método equals e suas variantes:

str.equals("")
L

O operador == entre objetos compara se as duas instancias são o mesmo objeto, não se o valor é o igual. Ou seja:

String a = "";
String b = new String("");
a == b //false
a.equals(b) //true
I

:XD: Agora entendi.

senaum fosse agora com tantas explicações eu iria desistir e voltar ao Qbasic, :cry: ahh qbasic era taum legal.

_

Mais aqui:
http://www.guj.com.br/java.artigo.103.1.guj

I

Contestar:

"Artigo daki do Cruj":
String teste1 = new String("guj.com.br");
String teste1 = new String("guj.com.br");

System.out.println(teste1 == teste2);
System.out.println(teste1.equals(teste2));

Não devemos utilizar operador == para comparar o valor de Strings, já que eles são objetos, e não tipos primitivos. Então o resultado deste programa não deve assustar ninguém:

false
true

Já este, pode assustar algumas pessoas, especialmente as que já tem consolidado o fundamento anterior:

// repare que estas duas linhas são as únicas com mudanças
String teste1 = "guj.com.br";
String teste2 = "guj.com.br";

System.out.println(teste1 == teste2);
System.out.println(teste1.equals(teste2));

E a macabra saída:

true
true

na primeira ele compara duas strings e a teste2 nem foi iniciado, dai claro q a primeira linha da saida do primeiro teste ia dar false.

Naum sei se estou ficando biruta ou sem lógica, ou será q a linha do artigo está errada?

J

É a linha que está errada, o correto seria:

String teste1 = new String("guj.com.br");
 String teste2 = new String("guj.com.br");
 
 System.out.println(teste1 == teste2);
 System.out.println(teste1.equals(teste2));

O ideal é você pensar o seguinte:

Uma variável do tipo “String” na verdade é um objeto. Se você comparar duas variáveis String com “==”, estará comparando dois objetos e não as strings que eles representam. Para comparar as strings mesmo, você deve SEMPRE usar o método “equals”.

Não sei se fui claro… :slight_smile:

T

Quando você usa o “==”

vocÊ na verdade está comparando a referência do objeto na memória…
por exemplo…

String a = “1”; // suponha que o nome da referência na memória seja… 123@dfdfdf hilç

String b = “1” // suponha que o nome desta referência seja 123456%147$f

logo 123@dfdfdf hilç != 123456%147$f, não é??? Por isso essa comparação da falso!!

quando você usa o método equals, ele vai comparar não o endereço de memória, e sim o conteúdo da string, que seria 1 e 1!!!

Deu para esclarecer agora???

R

Se interessar, na Mundo Java deste mes tem uma materia legal sobre comparaçoes de objetos.

W

Estou com um problema em comparações de string. Se existe o metodo str.equals() para igualdade, qual seria o metodo para diferença de strings?

C

WebFaria, tenho o prazer de lhe apresentar o operador binario !, tambem conhecido como “not”:

boolean a = "foo".equals("bar") // false boolean b = !"foo".equals("bar") // true

I

aaahhh joga algo como if (String.equal("string") != 0)

ai se a string for diferentes vai “entrar” no if (eu nunca vi uma linguagem entrar em um if, mas blz)

L

Galera,

Valeu, perdi 30 minutos tentando resolver isto, usei um tal “ignorecomparecase” só que dava erro no Palm. Aí deu certo com equal;

Agradeço pela ajuda indiretamente;

R

to ficando loco...

eu tou com o mesmo problema, a comparacao de strings nao funciona...

estou testando a class Scanner para ver se consigo fazer um prompt de comandos, ex: exit == System.exit(1);

ele simplismente nao funfa, nao da erro nem nada, so nao chama o exit...

olha como estou fazendo:

import java.io.*;

public class ReadString {

   public static void main (String[] args) {

		while(true){
		      System.out.print("comando > ");
		
		      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		      String command = null;

		      try {
		         command = br.readLine() + "\n";
		      } catch (IOException ioe) {
		         System.out.println("Error: O programa não conseguiu ler o comando.");
		         System.exit(1);
		      }
		
			  if(command.equals("exit") == true){
			  	System.exit(1);
			  }
		}
   }

}

"aonde foi que eu errei?" rs

abracos e obrigado desde ja

C

Voce esta comparando “exit\n” com “exit”. Elas nao sao iguais :slight_smile:

R

pultz é verdade :stuck_out_tongue:

muito obrigado cara…

so mais uma pergunta quanto a string, eu vou digitar o comando no console tipo:

/volume n // n == numero do volume;

certo, eu ja sei como descobrir se o comando é volume, mais como eu faco para pegar o n ? eu vim do php, la ou eu faria com explode ou str_replace…

nao sei se voce conhece, mais str_replace troca uma ocorrencia duma strng, existe essa funcao em java? por ex:

$string = “/volume 100”;
str_replace("/volume “,”",$string);

echo $string; // retornaria 100;

existe essa funcao em java?
novamente obrigado
abracos

C

De uma olhada nos metodos da classe String. No JavaDoc, pra variar :wink:

Adiantando: o metodo que vc quer eh provavelmente o split() :slight_smile:

Criado 6 de abril de 2005
Ultima resposta 11 de abr. de 2005
Respostas 20
Participantes 12