详解一、八种基本数据类型常识

1.1、基本常识表

包装类和基本数据类型_java基础

 

java八种基本数据类型分为四类八种,四类分别为整型、浮点型、布尔型、字符型;八种分别为byte、short、int、long、float、double、boolean、char;对于上图有以下几点需要注意:

java八种基本数据类型的字节数:分别为1、2、4、8个字节;1字节(byte、boolean)、 2字节(short、char)、4字节(int、float)、8字节(long、double);

整数的默认类型为int,浮点数的默认类型为double;

java是一门面向对象的语言,但是8中基本数据类型不具备面向对象的特征,所以实际使用中很不便所以为java八种基本数据类型提供了对应的包装类;

八种基本数据类型的包装类:除了char的是Character、int类型的是Integer,其他都是首字母大写;

对应包装类的直接父类:前6个由于是数,直接父类为Number,而后两个的直接父类就是Object类;

关于值的范围问题,需要注意char类型是无符号的,不能为负,所以是0开始的;

详解二、直接量与类型转换

2.1、直接量

  1. 整数型的直接量默认为int类型
  2. 浮点型的直接量默认为double类型

@Test
public void d() {
int a = 100;//这个100就是直接量
a = a + 100;//但是这个a+100不是直接量
double b = 3.14;
}


2.2、类型转换

1.自动转换:低类型的向高类型的转换

        如下图:顺着箭头的方向是可以自动转换的;

包装类和基本数据类型_java基础_02

 2.强制转换:高类型的向低类型转换,但可能会数据溢出或者精度丢失

包装类和基本数据类型_包装类_03

以上为几种正常的情况,但是有一种特殊的情况,就是int型直接量可以直接赋给byte、short、char类型变量,只要不超出变量类型的取值范围

 

 包装类和基本数据类型_java基础_04

 数据运算时的类型转换

1)运算时,运算结果会向较大的类型转换

包装类和基本数据类型_java基础_05

 

2)特殊的:byte、short、char三种数据类型参与运算时,先一律转化为int类型;

包装类和基本数据类型_java基础_06

 强制转换

 高等级转为低等级的时候,必须强制转换,但实际工作中不推荐使用强制转换,可能会失精度或数据溢出;

包装类和基本数据类型_强制转换_07

 补充说明:不是只有强制转换的时候会出现数据,例如下面这种情况

包装类和基本数据类型_基本数据类型_08

详解三、对应包装类及使用

3.1、常用方法一:静态方法 valueOf()

  1. 参数为基本数据类型,返回包装类对象;
  2. 参数为String字符串(Character类没有以String为  参数的该方法),返回包装类对象;

包装类和基本数据类型_强制转换_09

3.2、常用方法二:静态方法parseXXX(String str)

  1. Character类没有该方法;
  2. 作用:将字符串装换为对应的基本数据类型(注意此处和上面的valueOf方法返回值的不同);

 包装类和基本数据类型_包装类_10

3.3、常用方法三:非静态方法XXXValue()

  1. 因为是非静态方法,所以不能像上面两个方法用类名调用了;
  2. 数字类的包装类(八种包装类中父类是Number的的六个类)才有该方法;
  3. 作用:将当前包装类对象转换为对应的基本数据类型;

包装类和基本数据类型_类型转换_11

3.4、自动拆箱与装箱

  • 简介:jdk1.5之后的新特性。该特性是编译器认可的,是在编译器自动将基本数据类型和包装类相互转换,节省了麻烦。
  1. 自动拆箱 包装类——>基本数据类型 (原理是调用了xxxValue方法)    
  2. 自动装箱 基本数据类型——>包装类 (原理是调用了valueOf方法)

包装类和基本数据类型_包装类_12

3.5、关于valueOf()方法源码研究

通过按住Ctrl键,鼠标点击该方法即可查看源码,以Integer类的valueOf(int i)的源码为例

包装类和基本数据类型_强制转换_13

关于源码的理解:Integer类的valueOf(int i)方法首先会判断i是否在-128~127之间,如果在的话,就返回的对象是Integer类中静态数组cache中的对象,如果不是在这之间,就会重写创建一个新的对象。

通过查看其它类的该方法的源码之后,可以得到该表:

包装类和基本数据类型_类型转换_14

详解四、相关面试题

4.1、类型转换

注意一些喜欢忽视的类型转换

包装类和基本数据类型_强制转换_15

4.2、+=的情况

包装类和基本数据类型_包装类_16

4.3、自动装箱

  • 包装类和基本数据类型比较时,只要值相等就相等

包装类和基本数据类型_包装类_17

4.4、char类型存储汉字

char类型能不能存储一个汉字?为什么?

     解析:能,char类型采用的是Unicode编码,Unicode编码包含汉字,所以char类型自然是可以存储一个汉字的

4.5、浮点数精度问题

包装类和基本数据类型_java基础_18