Java的数据类型有两大类:一类是基本数据类型,一类是引用类型(包括String,数组)。
基本数据类型:
整数型:byte(8位)、short(16位)、int(32位)、long(64位)
浮点型:float(32位)、double(64位)
字符型:char(16位)用单引号赋值
布尔型:boolean(1位),只有true和false两种取值

基本数据类型引用类型的区别:
基本数据类型相比较使用“==”;引用类型相比较使用“equals”,使用时可以赋值为null;
基本数据类型的变量名指向具体数值;引用类型变量名指向存数据对象的内存地址;

数据转换

数据转换有两种情况,自动转换和强制转换;
符合下列条件Java会进行自动转换:

  • 低精度向高精度转换,例如:int->double;【(byte,short,char) < int < long < float < double】
  • 整数型和浮点星相运算,结果会变成浮点型。

强制转换:
强制转换可以使用“()”,可以按照自己的意愿进行转换,但有可能会丢失精度。

装箱和拆箱:

Java为每个基本数据类型都提供了包装类
基本数据类型与包装类的转换被称为装箱拆箱

  • 装箱(boxing)是将值类型转换为引用类型。例如:intInteger
    • 装箱过程是通过调用包装类的 valueOf 方法实现的。
  • 拆箱(unboxing)是将引用类型转换为值类型。例如:Integerint
    • 拆箱过程是通过调用包装类的 xxxValue 方法实现的。(xxx 代表对应的基本数据类型)。

需要注意的是,自动装箱会隐式地创建对象,从而产生一些无用的中间对象,增加GC的压力,因此在写循环时应避免引入不必要的装箱操作。
JDK 5 之前的形式:

  1. Integer i1 = new Integer(10); // 非自动装箱
  2. 复制代码

JDK 5 之后:

  1. Integer i2 = 10; // 自动装箱

Java 对于自动装箱和拆箱的设计,依赖于一种叫做享元模式的设计模式

装拆箱的应用场景:
一种最普通的场景是:调用一个含类型为 Object 参数的方法,该 Object 可支持任意类型(因为 Object 是所有类的父类),以便通用。当你需要将一个值类型(如 int)传入时,需要使用 Integer 装箱。例如:ArrayList

装箱、拆箱应用注意点

  1. 装箱操作会创建对象,频繁的装箱操作会造成不必要的内存消耗,影响性能。所以应该尽量避免装箱。
  2. 基础数据类型的比较操作使用 ==,包装类的比较操作使用 equals 方法。