String Java

Bom dia!

Estou começando a estudar JAVA, e fiquei com duvida em relação a comparação de Strings.

Segue o codigo:

package pkg05032018;

import java.util.Scanner; // Importar a biblioteca Scanner

public class SemaforoOld {

public static void main (String [] args)

{

	String semaforo;
		
	Scanner scanner = new Scanner(System.in);
	
	System.out.println("Verde");
	System.out.println("Amarelo");
	System.out.println("Vermelho");
	
	System.out.print("Informe a cor do semaforo: ");
	semaforo = scanner.toString();
	
	if (semaforo.equals("Verde"))
	{
		System.out.println("A proxima cor será Amarela");
	}
		else if (semaforo.equals("Amarelo"))
		{
			System.out.println("A proxima cor será Vermelha");
		}
			else if (semaforo.equals("Vermelho"))
			{
				System.out.println("A proxima cor será Verde");
			}
				else 
				{
					System.out.println("A cor não corresponde a nenhuma das tres opçoes");
				}
	
	
}

}

E qual seria a dúvida?

Para não ficar cheio de if e else, pq não usa o switch case? Acho que fica melhor.

E tente inverter “vermelho”.equals(semaforo)

switch( operacao )
    {
        case '+':
            System.out.printf("%.2f + %.2f = %.2f", numero1, numero2, numero1 + numero2);
            break;        
            
        case '-':
            System.out.printf("%.2f - %.2f = %.2f", numero1, numero2, numero1 - numero2);
            break;
            
        case '*':
            System.out.printf("%.2f * %.2f = %.2f", numero1, numero2, numero1 * numero2);
            break;
            
        case '/':
            System.out.printf("%.2f / %.2f = %.2f", numero1, numero2, numero1 / numero2);
            break;
        
        default:
            System.out.printf("Você digitou uma operação inválida.");        
        
    }

String é um objeto e, devido a isso, precisa ser comparada utilizando o método equals, herdado da classe Object.

Comparar o valor digitado na variavel: semaforo.equals(“Verde”)

O darlan deu a resposta acima, para comparar o conteudo de uma String usamos o .equals() porque String é um objeto e usamos == para comparar se a referencia de um objeto é a mesma, exemplo:

Object a = new Object();
Object b = a;
a == b será true.
Agora Se existir a seguinte situação:

Object a = new Object();
Object b = new Object();

Aqui a e b já não estão apontando mais para a mesma referência então vai dar false a se voce comparar a == b.

então para comparar conteudo de String use .equals()

.

Opa, cuidado com isso. As Strings são tipos especiais de classes que, às vezes, podem surpreender neste tipo de comparação

    public class Compara {
    public static void main(String[] args) {
	    String x = "a";
		System.out.println("a".equals(x)); //true
		System.out.println("a" == x); //true
		String b = "a";
		System.out.println(x.equals(b)); //true
		System.out.println(x == b); //true
		String c = new String("a");
		System.out.println(x.equals(c)); //true
		System.out.println(x == c); //false
	}
}

Verdade darlan, muito bem lembrado.

senão me engano ele é possível comparar as Strings e dar true da maneira que você citou porque quando criamos a String dessa forma String x = “a”, e String b = “a”, o java comparando num mesmo local(Que nesse momento não me recordo o nome) se ja existe uma String com o mesmo e vai considerar da mesma instancia se já existe uma String com aquele valor.
Se nesse mesmo exemplo ele alterar o valor de b para teste por exemplo vai dar false mas o == ainda esta comparando as referencias.
Para comparar conteúdo de String use sempre .equals()

Bom dia!

Desculpa a demora. Conseguir fazer com o equals. Agradeço ajuda.

semaforo.equals(“Verde”)