Java除了数字类型的自动隐式类型转换,对类有类似功能么?
发布网友
发布时间:2023-06-09 12:42
我来回答
共2个回答
热心网友
时间:2024-10-22 15:43
在 Java 中,除了数字类型的自动隐式类型转换之外,类之间也可以进行自动类型转换。
如果一个类型的对象实现了另一个类型的接口,或者一个类型的对象是另一个类型的子类,那么就可以将前者自动转换为后者的类型。
例如,假设有两个类 A 和 B,其中 A 是 B 的子类。那么可以将 A 类型的对象自动转换为 B 类型,如下所示:
A a = new A();
B b = a; // 自动类型转换
这种自动类型转换的机制在 Java 中称为多态(Polymorphism)。
热心网友
时间:2024-10-22 15:43
自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理,特点:数据范围小的转为数据范围大的时会自动进行。
强制类型转换
强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成,特点:数据范围大的转为数据范围小的
1.小类型转为大类型是自动提升的
1.1小类型变变量赋值给大类型时,例:long a = 20;
1.2小类型和大类型进行数*算时,首先会将小类型提升为大类型而后进行数*算,
例
1.2.1 int 和 long 之间转换:
int a = 10;
long b = a + 1L;
//int + long = long + long, a 提升为long类型
1
2
3
1
2
3
1.2.2 int 和 double 之间转换:
int a = 4;
double b = 2;
//int / double -> double / double,a 提升为double类型
System.out.println(a/b);
1
2
3
4
1
2
3
4
2.大类型转为小类型需要强制类型转换,可能会导致数据精度丢失(数据溢出或部分数据丢失)
例
2.1 long 和 int 之间转换:
long b = 100L;
//long -> int需要强制类型转换
int c = (int) b;
1
2
3
1
2
3
2.2 double 和 int 之间转换:
double c = 1.0;
//double -> int需要强制类型转换
int d = (int) c;
1
2
3
1
2
3
3.特殊强调
3.1 int 和 byte 之间的转换:
int a = 10;
byte b = (byte)a;//大到小,强转
int c = b;//小到大,自动提升
1
2
3
1
2
3
image-20220404184210950
对于数值型和字符型来说,小于4字节的数据类型,在存储时会转为4字节。byte类型在保存时会转为int类型。
当把byte类型保存区间之内的整数赋值给byte时,可以直接赋值,超出byte的范围仍然需要强制类型转换。
image-20220404184507286
image-20220404184555787
image-20220404184616894