Есть ли какая то потеря данных при процессе использования этих преобразований?
Логично, что при сужении типа некоторые данные теряются, а при его расширении - данных наоборот становится больше.
Единственный момент ещё - это то, что расширающиеся преобразование может выполняться неявно, а сужающиеся обязательно нужно реализовывать явно
Пример расширяющего преобразования:
package com.company;
public class Main {
public static void main(String[] args) {
int big = 1234567890;
float approx = big;
System.out.println(big - (int)approx);
}
}
Сужающего:
package com.company;
public class Main {
public static void main(String[] args) {
float fmin = Float.NEGATIVE_INFINITY;
float fmax = Float.POSITIVE_INFINITY;
System.out.println("long: " (long)fmin
".." (long)fmax);
System.out.println("int: " (int)fmin
".." (int)fmax);
System.out.println("short: " (short)fmin
".." (short)fmax);
System.out.println("char: " (int)(char)fmin
".." (int)(char)fmax);
System.out.println("byte: " (byte)fmin
".." (byte)fmax);
}
}