java基础 之 数据类型【二】(自动类型转换和空Object对象)
程序员文章站
2022-03-24 17:23:32
...
三、自动转换类型
1、定义
- 在java 程序中,不同的基本类型的值经常需要进行相互类型转换,类型转换分为自动类型转换和强制类型转换。
- 自动类型转换是指取值范围小的类型,自动转换为取值范围大的类型。
2、自动转换类型图
- 转换原则为从低精度向高精度转换。
- ——红色箭头为无数据丢失的自动转换。
- ——蓝色箭头为在自动转换时可能会有精度的损失。
3、注意
- 布尔类型boolean占有一个字节,由于其本身所代码的特殊含义,boolean类型与其他基本类型不能进行类型的转换(既不能进行自动类型的提升,也不能强制类型转换), 否则,将编译出错。
- java中整数类型默认是int类型,小数类型默认是double类型。
4、栗子
class FJC
{
public static void main(String[] args)
{
int a = 5;
byte b = 6;
//自动转换
int c = a + b;
System.out.println(c);
}
}
- 分析:
- a是int类型,b是byte类型,当二者进行加法运算时(根据同类型相加结果还是同类型,并且低类型的先转换成高类型的然后在进行运算,最后结果也是同类型的才行)由于int的范围比byte的取值范围大这个时候jvm会自动将b转换成int类型。
四、空Object对象
1、定义
- 空Object对象指的是保存在堆中没有任何属性的对象。
2、大小
- 在Java中,一个空的Object对象的大小是8Byte。
- Object ob =new Object();所占空间为4byte+8byte。
- 4byte是上面部分所说的java栈中保存引用的所需要的空间。
- 8byte是java堆中对象的信息,所有的java非基本类型的对象都需要默认继承Object对象,因此不管怎么样的java对象,其大小都必须大于8byte。
- Java在对对象内存分配时都是以8的整数倍来分,不是整数倍的需要找就近的8的整数倍
3、栗子
Class NewObject {
int count;
boolean flag;
Object ob;
}
- 分析:
- 空对象大小(8byte)+int大小(4byte)+Boolean大小(1byte)+空Object引用的大小(4byte)=17byte。但是因为Java在对对象内存分配时都是以8的整数倍来分,因此大于17byte的最接近8的整数倍的是24,因此此对象的大小为24byte。