Um dos aspectos principais de trabalhar com números em Java é a distinção entre inteiros (números sem dígitos depois do separador decimal) e números de ponto flutuante (números com zero ou mais dígitos depois do separador decimal).
O Java tem outros tipos de dados além de int e double:
// 8-Bit Integer
byte a = 127;
// 16-Bit Integer
short b = 262143;
// 64-Bit Integer
long d = 18446744073709551999L;
// 32-bit Single-Precision Floating-Point
float e = 5409.29f;
Tanto inteiros quanto números de ponto flutuante podem usar o caractere _ como separador de dígitos, o que ajuda na hora de definir números grandes:
int largeInt = 1_000_000;
// => 1000000
double largeDouble = 9_876_543.21;
// => 9876543.21
A aritmética é feita com os operadores aritméticos padrão (+, -, *, etc.).
Números podem ser comparados com os operadores de comparação padrão (<, >=, etc.), junto com o operador de igualdade (==) e o operador de desigualdade (!=).
5 * 6
// => 30
1.2 > 0.8
// => true
120 == 100
// => false
2 != 4
// => true
Ao converter entre tipos numéricos, existem dois tipos de conversão numérica:
Como um int tem menos precisão que um double, converter de int para double é seguro e, por isso, é uma conversão implícita.
Já converter de double para int pode significar perda de dados, então isso exige uma conversão explícita.
int i = 9;
double d = 2.72;
// Safe conversion, thus implicit conversion
double fromInt = i;
// Potentially unsafe conversion, thus explicit conversion
int fromDouble = (int)d;