Java数据类型转换

Java数据类型转换

Java的数据类型分为两类:基本数据类型和引用数据类型, 基本数据类型包括boolean类型和数值类型。数值类型有整数类型和浮点类型。整数类型包括 byte、short、int、long、char,浮点类型包括float和double,引用数据类型是指一个对象的引用,常见的引用数据类型有String、数组、集合等

一、基本数据类型与基本数据类型转换

1、自动类型转换(由低到高)

1)byte–>short–>int–>long–>float–>double ,小精度可转大精度,大转小会失去精度

在这里插入图片描述

输出结果:

在这里插入图片描述

2、强制类型转换(由高到低)

在这里插入图片描述

输出结果:

在这里插入图片描述

3、a=a+b和a+=b的区别

在这里插入图片描述

二、基本数据类型与引用数据类型转换

1、装箱与拆箱

那什么是装箱?什么是拆箱?装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。那自动装箱与自动拆箱也很好理解了,就是我们不用在代码里面显式的写装箱与拆箱的代码,由编译器帮我们完成这一操作。
下面是基本数据类型对应的包装器类型:

在这里插入图片描述在Java SE5之前只能手动装箱与拆箱,之后可以自动装箱拆箱
在这里插入图片描述
二、常见的问题
1、下图输出结果是什么?
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201118165923127.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjYyNjgwOA==,size_16,color_FFFFFF,t_70#pic_center

请仔细考虑这四个判断结果,下图为实际输出结果

在这里插入图片描述输出结果是否与您答案一致,如果不同为什么会出现这样的结果?
首先前两个都是Integer对象调用equals方法比较,重写后的方法只是比较对象的int值,值相等则对象相等,所以均返回true。
后两天一个为true一个为false,则是因为使用“==”运算符就需要Integer对象直接比较内存地址在这里插入图片描述
查看源码可知如果数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用,超过范围则新建一个Integer对象,因为100在取值范围内所以i1和i2指向同一个对象

2、 对下面这段代码的输出结果是否存在疑问?
在这里插入图片描述
为什么Double类的valueOf方法会采用与Integer类的valueOf方法不同的实现。很简单:在某个范围内的整型数值的个数是有限的,而浮点数却不是。所以Duble类型没有设置缓存,每次都是新建一个对象。

3、Boolean只存在true和false两个常量属性结果,所以就不多加赘述。

三、总结:

1、知道基本数据类型的优先级,自动转换和强制转换处理
2、基本数据类型与他们的包装类转换,装箱和拆箱
3、装箱会创建对象,频繁的装箱会消耗许多内存,影响性能,所以能避免装箱的时应尽量避免。
4、对于两个包装类比较时的注意事项,分清比较地址还是比较数值

相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页