Pergunta

Como somar dois objetos Integer ou Float?

Resposta

A linguagem Java possui duas formas para tratar os inteiros, os números em ponto flutuante assim com outros tipos.

Para os números inteiros existem os tipos int ou Integer. A primeira opção permite definir uma variável inteira simples, cujos propósitos são armazenar valores inteiros e possibilitar operações aritméticas sobre tais valores. A segunda opção representa uma classe que "embrulha" ("wrap") um valor inteiro de forma que possa ser tratado como um objeto. O mesmo acontece com os números em ponto flutuante, que podem ser representados pelo tipo primitivo float ou pelos objetos Float.

Na forma de objetos, é necessário algum cuidado para seu manuseio e operação. Observe o código abaixo:

Integer um = new Integer(1);
Integer dois = new Integer(2);
Integer soma = um + dois; // esta operação *não* é permitida

A operação acima, embora desejável, não é possível por duas razões: Java não suporta sobrecarga de operadores (no caso a operação "+" não tem definição válida para o tipo Integer) e os tipos Integer são objetos imutáveis, isto é que não pode ter seu valor alterado.

Isto ocorre porque o propósito das classes Wrapper (veja JavaFaq 00104) é apenas fornecer um meio de tratar os tipo primitivos como objetos e não sua manipulação algébrica. Para efetuarmos a soma de dois objetos Integer ou Float devemos proceder como nos exemplos abaixo:

Integer um = new Integer(1);
Integer dois = new Integer(2);
// soma armazenada num *novo* objeto Integer
Integer soma = new Integer(um.intValue() + dois.intValue());
Float a = new Float(1.28);
Float b = new Float(8.72);
// produto armazenado numa variável primitiva simples
float produto = a.floatValue() * b.floatValue();

Veja na documentação que acompanha o JDK os demais métodos existentes nas classes Wrapper.