当前位置: 移动技术网 > IT编程>开发语言>Java > 关于Integer 和Double包装类创建对象时的底层解析

关于Integer 和Double包装类创建对象时的底层解析

2020年01月11日  | 移动技术网IT编程  | 我要评论

ts158.tk,赵作斌,王若葳下载

public void method1() {
    integer i = new integer(1);
    integer j = new integer(1);
    system.out.println(i == j);
    integer m = 1;
    integer n = 1;
    system.out.println(m == n);//true
    integer x = 128;
    integer y = 128;
    system.out.println(x == y);//false
}

如题,当数值大于等于128时,创建的俩个对象地址就不一样了,这个原因还得看integer的源码

1 public static integer valueof(int i) {
2     if (i >= integercache.low && i <= integercache.high)//-128~127
3         return integercache.cache[i + (-integercache.low)];
4     return new integer(i);
5 }

这个integercache 数组是包装类自己创建的缓存数组,里面存放着【-128,127】的整数,当数值在这个范围时,会从这个数组中直接取值,当数值不在这个范围时,就会新建对象,所以地址就会不一样

-------------------------------------------------

那么double类型的呢

    public static void main(string[] args) {
        double a = 2.0;
        double b = 2.0;
        double c = 2.0;
        double d = 2.0;
        system.out.println(a == b);//true
        system.out.println(c == d);//false
        system.out.println(a == d);//true
    }

进源码

public static double valueof (double d){
               return  new  double (d)   ;
    
}    

显然,double没有integer花里胡哨,只有调用就新建一个对象

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网