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

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.

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

naum entendi :roll:

‘==’ é 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)) ...

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

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("")

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

: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

Contestar:

[quote=“Artigo daki do Cruj”][code]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)); [/code]

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

[code]String teste1 = “guj.com.br”;
String teste2 = “guj.com.br”;

System.out.println(teste1 == teste2);
System.out.println(teste1.equals(teste2)); [/code]

E a macabra saída:

true true [/quote]

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?

É 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:

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???

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

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?

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

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)

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;

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:

[code]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);
		  }
	}

}

}[/code]

“aonde foi que eu errei?” rs

abracos e obrigado desde ja

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

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