Erro ao implementar o método compara

Bom Dia Pessoal,

Após fazer algumas alterações no meu código, o mesmo agora está retornando o seguinte erro:

double cannot be dereferenced in line 52.

A linha de código a qual ele se refere é a que segue abaixo:


public boolean compara(Funcionario f2){
    	if (this.nome.equals(f2.nome)
       [b] && this.salario.equals(f2.salario)[/b]       
        && this.departamento.equals(f2.departamento)
        && this.dataDeEntrada.equals(f2.dataDeEntrada)
        && this.RG.equals(f2.RG)){
        System.out.println("Iguais");
        return true;
    }else{
        System.out.println("Diferentes");
        return false;
    }
}

É a linha de salario, onde ao compilar o código o mesmo retorna erro.

O Exercício solicita que utilize o valor double para salário, mas isso está gerando o erro, existe outra forma de fazer isso sem que ele retorne esse erro?

Grato,
Rafael.

[quote=jrbonilha]Bom Dia Pessoal,

Após fazer algumas alterações no meu código, o mesmo agora está retornando o seguinte erro:

double cannot be dereferenced in line 52.

A linha de código a qual ele se refere é a que segue abaixo:


public boolean compara(Funcionario f2){
    	if (this.nome.equals(f2.nome)
       [b] && this.salario.equals(f2.salario)[/b]       
        && this.departamento.equals(f2.departamento)
        && this.dataDeEntrada.equals(f2.dataDeEntrada)
        && this.RG.equals(f2.RG)){
        System.out.println("Iguais");
        return true;
    }else{
        System.out.println("Diferentes");
        return false;
    }
}

É a linha de salario, onde ao compilar o código o mesmo retorna erro.

O Exercício solicita que utilize o valor double para salário, mas isso está gerando o erro, existe outra forma de fazer isso sem que ele retorne esse erro?

Grato,
Rafael.[/quote]

Cara, procure ler um material mais básico antes de mais nada. double é um tipo primitivo, e não pode ser comparado usando o equals. O mesmo já não vale para String’s e arrays, pois são tipos de referências.

Infelizmente , essa é uma “teoriazinha” básica do Java, que trata justamente da diferença entre variáveis primitivas e variáveis de referência, além dos conceitos de identidade e igualdade de objetos. Se esses conceitos não ficarem firmes é bem possível que sofra um pouco com o Java. Principalmente quando você precisar lidar com Collections.

Obrigado rmendes08,

Vou pesquisar sobre esse assunto, o que eu estou estranhando é que na parte de variáveis primitivas da apostila da Caelum não está claro quais são as operações possíveis de serem realizadas com variáveis primitivas.

Abraços,
Rafael.

Bom, as variáveis primitivas são as “variáveis soltas” do Java. A maioria dos operadores se aplicam às variáveis primtivas: +, -, /, *, &&, &, || , | , ! , etc. As exceções são o operador [] usado em arrays e o operador . (ponto) que é usado para acessar membros de objetos ou classes. O que pode acontecer é que a partir do Java 5 foi introduzido um recurso chamado auto-boxing/unboxing, que converte uma variável primitiva automaticamente para o seu tipo wrapper e vice-versa, de forma que você pode misturar tipos primitivos e objetos de maneira mais transparente. Esse é um assunto que vale a pena correr atrás também.

Obrigado rmendes08,

O recurso e o conceito de Auto-Boxing/Unboxing realmente é muito interessante, não imaginava que poderia existir um recurso assim.

Só com ele já deu uma luz quanto ao problema que tenho com o método compara. Por enquanto não achei um material que abordasse de forma aprofundada sobre igualdade de objetos e identidade, por favor teria algum para indicar?

Obrigado mais uma vez.
Abraços,
Rafael.

A própria documentação do Java é um bom material:

http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#equals(java.lang.Object)

e também a documentação da interface Comparable:

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Comparable.html

Bom Dia Pessoal,

Obrigado rmendes08 pela indicação de material. Graças ao recurso de Autoboxing / Unboxing consegui resolver o problema do método compara.

Agradeço desde já pela ajuda.

Abraços,
Rafael.