java基本数据类型各占多少字节,int和Integer区别

基本数据类型

类型 字节数 取值范围
byte 1 27 − 2 7 271 2 7 − 1
short 2 215 − 2 1 5 2151 2 1 5 − 1
int 4 231 − 2 3 1 2311 2 3 1 − 1
long 8 263 − 2 6 3 2631 2 6 3 − 1
char 2 \u0000~\uFFFF
float 4 小数
double 8 范围更大,精度更高
boolean 1 前七位是0

注意:而然,在实际的开发过程中,Double.valueOf(String) 和Float.valueOf(String)会丢失精度。如果我们需要精确计算的结果,则必须使用BigDecimal类来操作!一般项目中都会写一个BigDecimal的工具类,可自行百度。

基本数据和包装类

原因:

  1. java是面向对象语言,基本数据类型并不是一个具体的类,用包装类可以更好的提现万物基于对象这一理念。
  2. 集合中的泛型需要基类是Object类型,所以必须有个对象的包装类才能使用

区别:

  1. 包装类属于引用数据类型,所以它们之间的区别就是基本数据类型和引用数据类型的区别。反应到内存中,基本数据类型的值是存放在栈里面,而包装类的栈存放的是值得地址,值存放在堆内存中。
  2. 初始值不同,eg: int的初始值为 0 、 boolean的初始值为false 而包装类型的初始值为null

注意:
在java中,Integer,Short,Byte,Character,Long有缓存机制。浮点型没有该机制,大小范围除Character为0-127外其余均为-128–127.
具体举例为:

Integer a1 = 1;
        Integer a2 = 1;

        Integer b1 = 200;
        Integer b2 = 200;

        Integer c1 = Integer.valueOf(1);
//        Integer c2 = new Integer(1);      官方不推荐这种建对象的方法喔
        Integer c2 = Integer.valueOf(1);

        Integer d1 = Integer.valueOf(200);
        Integer d2 = Integer.valueOf(200);


        System.out.println("a1==a2?" + (a1 == a2));//true
        System.out.println("b1==b2?" + (b1 == b2));//false
        System.out.println("c1==c2?" + (c1 == c2));//false
        System.out.println("d1==d2?" + (d1 == d2));//false

可以看到,不同的创建方式也有是否用缓存的区别,大家可以细细体会。

你可能感兴趣的:(java基础)