
byte -> short/char -> int -> long -> float -> double
byte b = 5;
double d = 1.0;
d = b; // d = 5.0
Приведение типов производится к ближайшему возможному.
public class CompatibleNearestTypes {
void chooseType(int value) {
System.out.println("int");
}
void chooseType(long value) {
System.out.println("long");
}
void chooseType(String str) {
System.out.println("String");
}
void chooseType(Object obj) {
System.out.println("Object");
}
public static void main(String args[]) {
CompatibleNearestTypes r = new CompatibleNearestTypes();
char c = 25;
r.chooseType(c);
r.chooseType("Some string");
}
}
Какой из перегруженных методов будет вызван?Тип char ближе к типу int, чем к long, поэтому будет вызван метод void chooseType(int value).
"Some string" - имеет тип String. Хотя String наследуется от Object, для этого типа определён конкретный метод с типом String, т.е. будет вызван метод void chooseType(String str).
Классы-оболочки можно неявно приводить к своим примитивным типам и наоборот:
Integer I = 10;
int i = 30;
i = I; // i = 10
// or
int i2 = 45;
I = i2; // I = 45
Long L = 100L;
long l = 200;
L = l; // L = 200
// or
Long L2 = 380L;
l = L2; // l = 380
Но примитивы и оболочки разных типов нельзя приводить друг к другу.
// L = i;
// L = I;
// ошибка компиляции: incompatible types