If não entra

	public class Arquivo {
	public static void main(String[] args) throws FileNotFoundException {
	
                File teste = new File("./teste.txt");
		Scanner scan = new Scanner(teste);
		
		while(scan.hasNext()) {
			String x = ("1");
			String c = scan.next();
			if(c == x){
				System.out.println("igual");
			} else {
				System.out.println("diferente");
			}
		}

Alguem sabe pq não entra no if?

Repetindo pela enésima vez:

Para comparar duas strings, use equals ou equalsIgnoreCase.

http://www.guj.com.br/posts/list/52376.java

[quote=thingol]Repetindo pela enésima vez:

Para comparar duas strings, use equals ou equalsIgnoreCase.
[/quote]

haha eu acabei de me lembrar depois q postei =o haha

vlw

Acho, em minha opinião, que o Gosling comeu bola quando definiu a classe String e redefiniu apenas o operador "+".
Ele deveria ter redefinido "==", "!=", "&lt", "&lt=", "&gt", "&gt=" também.
Uma boa parte dos problemas com os iniciantes em Java é que o "==" não funciona direito com Strings.

Aproveitando o assunto…

No java tem como fazer essa redefinição ao definir uma classe?
Tipo no C++ onde eu conheço como sobrecarga de operadores.

Java não possui sobrecarga de operadores :frowning:

Talvez isso para mostrar a coerência mostrando que String é um Object e possui as características do tal. Mas concordo plenamente com você thingol. Já que a classe String é cheia de “não me toque” =) bem que ele poderia ter feito a redefinição dos operadores mesmo.

Boa parte desse tipo problema seria resolvido em bem menos tempo.

[]´s

[quote=thingol]Acho, em minha opinião, que o Gosling comeu bola quando definiu a classe String e redefiniu apenas o operador "+".
Ele deveria ter redefinido "==", "!=", "&lt", "&lt=", "&gt", "&gt=" também.
Uma boa parte dos problemas com os iniciantes em Java é que o "==" não funciona direito com Strings. [/quote]

Na verdade isso serve para qualquer objeto, pois o seguinte código:

public class Teste
{
	public static void main(String[] args)
	{
		Integer um = Integer.valueOf(1);
		Integer dois = new Integer(1);
		if(um == dois)
		{
			System.out.println("Iguais!");
		}
		else
			System.out.println("Diferentes!");
	}
}

Imprime “Diferentes” também. Eu até gosto do padrão do Java de que == significa o mesmo objeto, e não conteúdos iguais!

Eu concordo com o Thingol.

Especialmente pq String é uma classe que mais se parece com um tipo primitivo.

Para um iniciante é muito difícil entender que ele pode fazer:
String x = “Nova String”; (No lugar de String x= new String(“x”);

E:

String y = x + x; (No lugar de y = x.concat(x));

Mas não pode fazer o == para comparação…

Fora o fato de que comparar com o == dá certo às vezes, por causa do pool interno do java (não necessariamente por causa do conteúdo da String)… Aí fica ainda mais difícil de explicar porque daquela última vez o exercício que ele fez passou e dessa vez não…

Sei que já é assunto antigo mas…

Pior é quando vc pode fazer assim:
IF( a = b) THEN …

Acho legal que == é para objeto e equals conteúdo. Poderia ser == para conteúdo e === para objeto também, desde que ficasse separado = de == de === de equals.

Acho natural…
Imaginem se fosse o caso do “==” para comparação de duas Strings…
Dai teria um monte de gente reclamando que a classe String não suporte comparação de dois objetos…

Sei se so to colocando lenha na fogueira… mas java na sua essência tende a fazer com que tenha suporte a tudo, mesmo que isso complique um pouco

E ainda, temos que dar graças a deus de não serem char[].

Até mais …