Integer对象的创建方式以及区别

您所在的位置:网站首页 java创建数组的方式有哪些 Integer对象的创建方式以及区别

Integer对象的创建方式以及区别

2023-08-08 19:25| 来源: 网络整理| 查看: 265

    本文主要探讨以下三种方式生成一个Integer对象的区别

1.Integer num= 130; 2.Integer num = new Integer(12); 3.Integer num = Integer.valueOf(12);

    方式1:直接将一个int赋值给一个Integer对象,这个时候130这个int值会被自动装箱成一个Integer对象。我们采用如下代码来验证到底是不是包装成了一个Integer对象

public class IntegerAutoBox { public static void main(String[] args){ Integer num = 130; } }

    我们通过javap -c 命令查看编译后的内容如下

   我们可以看到,在main方法里我们调用Integer num = 130;的时候,会调用Integer.valueOf()这个静态方法来生成一个Integer对象,这个就是自动装箱。

    接下来我们就来看看通过这三种方式生成一个Integer对象的区别。

    首先,我们来看看自动装箱的方式,我们运行如下代码

public static void main(String[] args){ Integer num1 = 10; Integer num2 = 10; System.out.println("num1 == num2 ? " + (num1 == num2)); Integer num3 = 128; Integer num4 = 128; System.out.println("num3 == num4 ? " + (num3 == num4)); }

    运行后,我们会发现赋值为10的时候,打印出来的是true,赋值为128的时候打印出来的是false,这是为什么呢?上面我们已经提到了,采用这种方式赋值,最终调用的是Integer.valueOf()来生成的一个Integer对象,那么我们就来看看Integer.valueOf()的源码

public static Integer valueOf(int var0) { return var0 >= -128 && var0 = 127; } }

    我们可以看到在静态代码块里面执行了high = var0(127);并且采用for循环将cache[]数据进行了初始化,里面的对象就是-128 ~ +127这个区间段的所有对象。所以说,当我们通过自动装箱的方式来生成一个Integer对象的时候,如果我们传的值在-128 ~ +127的话,都会从Integer.IntegerCache.cache这个数据里面去取,所以说通过自动装箱方式生成Integer对象的时候,赋值在-128 ~ +127之间的时候,生成的多个对象都是同一个,这就是所谓的“享元模式”。而赋值超出这个范围的时候,会通过new Integer()来生成对象,故而生成的多个Integer对象不是同一个。

    通过new Integer方式来生成Integer对象,不管传的值是多少,都会创建新的,所以通过new Integer()方式生成的Integer对象始终不是同一个。

    通过Integer.valueOf()来生成的对象,在-128 ~ +127这个范围内,生成的是同一个对象,否则生成的对象不一样

    以上就是关于三种方式创建Integer对象的区别。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3