整数类型(默认int)

byte

使用一个字节存储,范围是 -128-127

short

使用两个字节存储,范围是-32768-32767

int

使用四个字节存储,范围是正负21亿

long

使用八个字节存储,范围是......

浮点类型

float

单精度,精度可以精确到小数点后7位

double

双精度,精度是float的双倍

注意:
1、默认浮点类型是double类型
2、使用float的时候,数字后要添加f
3、浮点类型并不能表示一个精确的值,会损失一定的精度,需要精准计算时使用BigDecimal

字符类型: char

占用2个字节,使用的时候使用''表示

布尔类型: boolean

只有true和false两值,在存储的时候占1位

数据类型转换

隐式转换

取值范围小的数据类型与取值范围大的数据类型进行运算,会先将小的数据类型提升为大的,再运算

public class Test{
   public static void main(String[] args){
       int x=2,y=3;
       byte b=2;
       x=x+b;
       System.out.print(x+y); //9
       System.out.print(x);   //7
   }
}
强制转换

如果超出了被赋值的数据类型的取值范围得到的结果会有精度损失

public class Test{
      int m=126;
      byte n=4;
      m=(byte)m+n;
      System.out.print(m);    //-126
 }

强制转换导致精度损失alt

包装类型

每个基础数据类型都有对应的包装类型,Boolean,Byte,Character,Short,Integer,Long,Float,Double。java是一个面向对象的语言,基本数据类型不具有对象的性质,所以需要将其包装起来,使其具有对象的性质,并且为其添加了属性和方法,丰富了基本数据类型的操作。

自动拆装箱

java提供了基础数据类型和包装类之间自动转换的功能,也就是自动拆箱(包装类自动转换为基础数据类型),自动装箱(基础数据类型自动转换为包装类)。

Integer i = 10; //装箱
int b = i; //拆箱

对此代码反编译:

Integer i = Integer.valueOf(10); //装箱
int b = i.intValue(); //拆箱

由此可见,java的自动装箱都是通过包装类的valueOf()方法实现的,自动拆箱都是通过包装类的xxxValue()实现的。

包装类型的equeals和==

1.包装类型的==比较的是内存地址,但是整数类型(Byte,Short,Integer,Long)有一个常量池,当取值范围在-128-127时,不会新创建一个对象,而是直接引用常量池中的对象,所以在这个范围取值,不管new了多少个对象,实际指向堆中的一个对象。
2.equals和String一样,重写了此方法,实际比较的值是否相等。

包装类和基本数据类型的区别

1.基本数据类型是把变量保存在栈中的,可以高效的存取。包装类型是对象,通过指针引用到堆中的实例。
2.基本数据类型都有对应的初始值,包装类型的初始值为null。
3.什么时候用基本数据类型,什么时候用包装类型。看这个变量是否允许为null,如果可以为null,就用包装类型。集合泛型,只能用包装类型。


MockingJay
7 声望3 粉丝

下一篇 »
内部类