Java Orientado a Objeto

Porque no if(operacao=="letra da operacao") vai direto para o else??

import java.util.Scanner;
import javax.swing.JOptionPane;
public class Calculadora{
    public static void main(String[]args){
        Scanner ler=new Scanner(System.in);

        double num1;
        double num2;
        double resul;
        double primeiro;
        String operacao;

        System.out.print("Digite o primeiro numero: ");
        num1=ler.nextDouble();

        System.out.print("Digite o segundo numero: ");
        num2=ler.nextDouble();

        operacao=ler.nextLine();
        System.out.print("Digite A-Adicao / S-Subtracao / M-Multiplicacao / D-Divisao: ");
        operacao=ler.nextLine();

        if(operacao=="A" || operacao=="a"){
            resul=num1+num2;
            JOptionPane.showMessageDialog(null, num1 + "+" + num2 + "=" + resul);
        }
        else if(operacao=="S" || operacao=="s"){
            System.out.print("Qual vira primeiro? 1º digitado ou 2º digitado? ");
            primeiro=ler.nextDouble();
            
            if(primeiro==1){
                resul=num1-num2;
                JOptionPane.showMessageDialog(null, num1 + "-" + num2 + "=" + resul);
            }
            else if(primeiro==2){
                resul=num2-num1;
                JOptionPane.showMessageDialog(null, num2 + "-" + num1 + "=" + resul);
            }else{
                JOptionPane.showMessageDialog(null, "!Opcao Invalida!");
            }
        }
        else if(operacao=="M" || operacao=="m"){
            resul=num1*num2;
            JOptionPane.showMessageDialog(null, num1 + "x" + num2 + "=" + resul);
        }
        else if(operacao=="D" || operacao=="d"){
            System.out.print("Qual vira primeiro? 1º digitado ou 2º digitado? ");
            primeiro=ler.nextDouble();
            
            if(primeiro==1){
                resul=num1/num2;
                JOptionPane.showMessageDialog(null, num1 + "/" + num2 + "=" + resul);
            }
            else if(primeiro==2){
                resul=num2/num1;
                JOptionPane.showMessageDialog(null, num2 + "/" + num1 + "=" + resul);
            }else{
                JOptionPane.showMessageDialog(null, "!Opcao Invalida!");
            }
        }else{
            JOptionPane.showMessageDialog(null, "!Opcao Invalida!");
        }
    }
}

String se compara com .equals

if(operacao.equals("a")){
   .......
}

Também teria que implementar “Orientado à Objeto”.
Você só fez um programa monolítico dentro do método main.

Para dar false acredito que a explicação mais lógica seria que as Strings comparam as instancias e não o valor que elas representam, então dá false mesmo por serem instancias diferentes, para comparar o valor usa o equals que o abner disse.

Complementando a explicação do colega.
Quando aplicado em variáveis do tipo referência (class, enum ou interface) os operadores == e != comparam o a referência ( o endereço de memória) e não o conteúdo.
Quando aplicado em variáveis de tipo primitivo (byte, boolean, short, char, int, float, long e double) eles comparam o conteúdo.

4 curtidas

MUITO importante entender isso.

1 curtida