[Java]第一章-数据类型

一、基本的数据类型

  • byte
  • int 4
  • short 2
  • long 8
  • float 4
  • double 8
  • char 2
  • boolean
    booleans是没有初始化,JVM编译的时候将其转化成int,JVM支持boolean,但是通过读写byte数组实现的

二、包装类型

Integer x=2;        //此处装箱操作,Integer.valueOf
int y=x;              //此处拆箱操作,intvalue
  1. 封装类和封装类==比较相等的时候比较的是:是否引用同一个对象,即缓存池里查找。
  2. 基本类型和基本类型比较的时候,比较的是:值。
  3. 封装类和基本类型比较的时候:将封装类先进行拆箱,再比较。
  4. equals是等价比较,对于基本类型不可使用,因此会先将其包装成封装类再比较。
  5. equals比较的是引用对象的值是否相等。
  6. 对于封装类+封装类这一类的操作,会将其拆箱后再进行运算。

三、==和equals的比较

public static void main(String[] args){
        Integer a=1;
        Integer b=2;
        Integer c=3;
        Integer d=3;
        Integer e=300;
        Integer f=300;
        Long g=3L;
        Long h=2L;
        System.out.println(c==d);//t
        System.out.println(e==f);//f
        System.out.println(c==(a+b));//t
        System.out.println(c.equals(a+b));//t
        System.out.println(g==(a+b));//t
        System.out.println(g==(a+h));//t
        System.out.println(g.equals(c));//f
        System.out.println(g.equals(a+h));//t
    }
  1. 比较的是引用对象,由于3在缓存池中所以T
  2. 比较的是引用对象,因为Integer的缓存池大小-128—127,所以F
  3. 右边拆箱,所以左边也拆箱,比较值。T
  4. 右边先拆箱相加,再装箱,比较值。T
  5. 右边拆箱,左边拆箱,比值。
  6. 同上,比值T
  7. 两个封装类型不同,所以比值也是F
  8. 右边拆箱相加变long,再装箱和左边封装类型相同所以T

四、缓存池

new Integer(123)

是创建一个新对象,创建在堆中。

Integer.valueOf(123)

装箱,会先到缓存池中寻找,如果缓存池没有,就new一个新对象放进去,池子里只有一份相同字面量。
缓存池可以结合字符串常量池一起理解。

原文地址:https://www.cnblogs.com/k-will/p/12687987.html