Duvida com esse exercicio de java

me perdoem pela minha falta de experiencia, mas sou aluno de SI e estou começando na programação. se poderem me ajudar com essa duvida agradeço

[color=red]package revisao2;

import javax.swing.*;

public class Questao04 {
public static void main(String[]args){

 String sexo;
      
 
sexo = JOptionPane.showInputDialog("Digite o sexo: ");


  if(sexo = "m" ) {
      JOptionPane.showMessageDialog(null,"sexo masculino\n"+ sexo);
    }else if(sexo = "f")   {
        JOptionPane.showMessageDialog(null, "sexo feminino\n"+ sexo);
    }else{
        JOptionPane.showMessageDialog(null, "sexo invalido\n"+sexo);
        
    }
  
 
}[/color]

eu realmente nao sei como fazer esse if dar certo usando o JOptionPane

1 - em Java, o sinal = significa atribuição, para testar igualdade você deve usar o sinal ==

2 - em Java, é importante saber diferenciar tipos primitivos e tipos de referência. O sinal de igualdade == deve ser usado apenas com tipos primitivos, para tipos de referência você deve usar o método equals()

3 - o tipo String é um tipo de referência, portanto, você deve usar o método equals() para comparar Strings:

String sexo =  JOptionPane.showInputDialog("Digite o sexo: ");

if("m".equals(sexo)){
   //... 
}else if("f".equals(sexo)){
  //...
}else{
  //...
}

Obs: A partir do Java 7 você pode usar switch-case com Strings:

String sexo =  JOptionPane.showInputDialog("Digite o sexo: ");

switch(sexo){
   case "m":
   case "M":
       //executa lógica
       break;

   case "f":
   case "F":
       //executa lógica
       break;

  default:
       break;
}

obrigado irmão ajudou demais

Não relativo ao código, mas quanto à ideia, tenha um cuidado quanto ao que pede que seja digitado. Tente ser mais claro para o usuário, visto que ele pode digitar m ou f, pode digitar masculino ou feminino, então, informe o que e esperado, por exemplo.

JOptionPane.showInputDialog(“Digite o sexo:\nMasculino ou Feminino.”);

Ou algo como…

int sexo = JOptionPane.showInputDialog(“Informe o sexo:\n1 - Masculino\n2 - Feminino.”);
Dessa última forma, você estaria esperando valores inteiros e poderia tratar isso pelo código, inclusive com o próprio switch.

switch(sexo)
{
case 1: //instruções
break;

case 2: //instruções
break;

default: //instruções
break;

}

Pode ainda tentar prevenir quanto ao último exemplo, que seja informado uma string ao invés de um inteiro, com o uso do while, para repetir a pergunta até o valor informado ser um inteiro e obrigatoriamente 1 ou 2.

Um amigo me ajudou aqui agora com isso, enquanto eu estava tentando colocar da melhor maneira possível esse while.

Esse trecho agora não foi autoria minha.

boolean isValid = false;
do {
int sexo= Integer.parseInt(JOptionPane.showInputDialog(“Informe o sexo:\n1 - Masculino\n2 - Feminino.”));
isValid = sexo == 1 || sexo== 2;
if (!isValid) {
JOptionPane.showMessageDialog(null, “Valor inválido.”);
}
} while (!isValid);

O “do while” executa a pergunta ao menos uma vez, e em seguida valida a informação. Se estiver de acordo, segue o código fora do “do while”, se for valor inválido, fica repetindo a mensagem(repetindo dentro do “do while”) até que um valor válido seja informado pelo usuário.

Bolean é uma variável que aceita “true” ou “false”. Por padrão seu valor é “false”, para que seja informado 1 ou 2 pelo usuário e então alterá-la para “true”.

O “!” antes da verificação, significa negação.

mas obrigado por esta nova dica de while eu creio que o ainda vou ver na aula sobre isso que no caso vi muito ligeiramente em C, porem no java muda um pouco. mas agradeço e futuramente farei novas perguntas de programação, pois perguntar e tirar as duvidas é a melhor forma de aprender.

Beleza. O uso do while e do do while é bem simples até. Vai entender fácil. A diferença é que o do while executa ao menos uma vez e ao final valida, enquanto o while valida e executa somente de acordo com a validação.