标签:自动类型转换 数据丢失 http null 默认值 tab 情况下 类型转换 编译器
基础数据类型 | byte | short | int | long | double | float | char | boolean |
---|---|---|---|---|---|---|---|---|
默认值 | 0 | 0 | 0 | 0l | 0.0 | 0.0f | null | false |
Java 中的基础模型因为其长度可知、生命周期(存活时间)可知,为了追求速度,基础数据都是存放在栈中的。另外栈有一个特点,就是栈中的数据可以共享。
例如:
int a = 3;
int b = 3;
基础类型的自动转换规则包括自动、强制、提升三种
自动类型转换是指:数字范围小的数据类型可以自动转换成数据范围大的类型
int a = 100;
long b = a;
具体可以残照下面这张图:
实线表示自动转换时不会造成数据丢失,虚线则可能会出现数据丢失问题。
在自动转换的过程中也需要考虑溢出问题,例如:
int a = Integer.MAX_VALUE;
int b = 2;
long c = a + b;
System.out.println(c);
// out -2147483647
在这种情况下编译器不会报错,但是打印出来的结果是负数(溢出)。因为jvm 中对其进行计算的时候,是先计算两个 int 的和,再将其自动转换为 long,但是在计算过程中,a和 b的和已经大于 int 的最大值,也就是说在自动转换之前结果已经是负数了,所以转换成 long 之后依然是负数。
另外,向下转换的时候可以直接将 int 的常量直接赋予给char、short、byte,只要常量的数字小于这些基础类型的最大上限,所以可以自动转换
short d = 3;
char e = 4;
byte f = 1;
下图中的 g 报错了,是因为int 的常量超过了 byte 的最大限度。
short d = 3;
char e = 4;
byte f = 1;
byte g = 128;
标签:自动类型转换 数据丢失 http null 默认值 tab 情况下 类型转换 编译器
原文地址:https://www.cnblogs.com/joimages/p/11994428.html