Приведение типов

Приведение типов

Неявное приведение примитивных типов осуществляется от более узкого типа к более широкому:

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
Типы данных