Ένα από τα βασικά σημεία όταν δουλεύεις με αριθμούς στη Java είναι η διάκριση ανάμεσα στους ακέραιους (αριθμούς χωρίς ψηφία μετά την υποδιαστολή) και τους αριθμούς κινητής υποδιαστολής (αριθμούς με μηδέν ή περισσότερα ψηφία μετά την υποδιαστολή).
Η Java διαθέτει και άλλους τύπους δεδομένων εκτός από τους int και 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;
Τόσο οι ακέραιοι όσο και οι αριθμοί κινητής υποδιαστολής μπορούν να χρησιμοποιούν τον χαρακτήρα _ ως διαχωριστικό ψηφίων, κάτι που βοηθάει όταν ορίζεις μεγάλους αριθμούς:
int largeInt = 1_000_000;
// => 1000000
double largeDouble = 9_876_543.21;
// => 9876543.21
Οι αριθμητικές πράξεις γίνονται με τους καθιερωμένους αριθμητικούς τελεστές (+, -, *, κ.λπ.).
Οι αριθμοί μπορούν να συγκριθούν με τους καθιερωμένους τελεστές σύγκρισης (<, >=, κ.λπ.), καθώς και με τον τελεστή ισότητας (==) και τον τελεστή ανισότητας (!=).
5 * 6
// => 30
1.2 > 0.8
// => true
120 == 100
// => false
2 != 4
// => true
Όταν μετατρέπεις ανάμεσα σε αριθμητικούς τύπους, υπάρχουν δύο είδη αριθμητικών μετατροπών:
Επειδή ο int έχει μικρότερη ακρίβεια από τον double, η μετατροπή από int σε double είναι ασφαλής και αποτελεί έμμεση μετατροπή.
Ωστόσο, η μετατροπή από double σε int μπορεί να σημαίνει απώλεια δεδομένων, οπότε απαιτεί ρητή μετατροπή.
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;