做名片用什么网站,seo按天计费系统源码,厂家招总代理,山东华邦建设网站首页#x1f308;个人主页: Aileen_0v0 #x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 #x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 包装类装箱和拆箱阿里巴巴面试题 包装类
在Java中基本数据类型不是继承来自Object#xff0c;为了… 个人主页: Aileen_0v0 热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 个人格言:“没有罗马,那就自己创造罗马~” 文章目录 包装类装箱和拆箱阿里巴巴面试题 包装类
在Java中基本数据类型不是继承来自Object为了在泛型代码中使用基本数据类型Java给每个基本数据类型都对应到了一个包装类中。
基本数据类型包装类byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean
装箱和拆箱 装箱/装包 : 把基本类型转变成包装类型 拆箱/拆包把一个包装类型转变成基本数据类型
public class Test {public static void main(String[] args) {int a 10;Integer ii a ; //自动装箱Integer ii2 new Integer(10);int b ii2;//自动拆箱System.out.println(ii);System.out.println(b);}
} 通过访问上面代码的字节码文件我们可以看到装箱的底层逻辑就是通过Integer这个类去调用valueOf这个方法去装箱。
public class Test {public static void main(String[] args) {int a 10;
// Integer ii a ; //自动装箱//根据字节码文件的内容可以将自动装箱的代码写成如下样式Integer ii Integer.valueOf(a);//手动装箱
//Integer ii2 new Integer(10);
// int b ii2;//自动拆箱int b ii2.intValue();//手动拆箱double d ii2.doubleValue();//即使原来不是小数类型也能手动拆箱成小数类型System.out.println(ii);System.out.println(b);System.out.println(d);}
} 阿里巴巴面试题
① public static void main(String[] args) {Integer ii 100;Integer ii2 100;System.out.println(ii ii2);}② public static void main(String[] args) {Integer ii 200;Integer ii2 200;System.out.println(ii ii2);}为什么上面的结果一个是true一个是false这是为什么呢 从上面代码中我们可以看到整个过程中都使用到了装箱通过查看装箱的源代码valueOf public static Integer valueOf(int i) {if (i IntegerCache.low i IntegerCache.high)return IntegerCache.cache[i (-IntegerCache.low)];return new Integer(i);}根据原代码我们可知道cache是缓存数组如果我们的i是在这个范围内的他就会返回这个缓存数组如果不在他就会再重新创建一个对象。如下图所示 对于100他是在我们数组的范围内所以它无需创建对象只需要在缓存数组中查找即可这两个装箱的变量他们指向的都是同一个对象的地址所以返回true而200则需要创建新的对象这两个变量所指的不是同一个对象内存地址也不一样所以返回false。