教育网站建设规划书,东莞厚街创新科技职业学院,平面设计能做什么工作,如何用wordpress建立论坛昨天京东笔试的一道选择题#xff0c;被坑了。最近一直在做笔试题#xff0c;发现自己学了两年多的java#xff0c;三大框架什么都会#xff0c;却连基本的拆箱装箱都忘了。昨天考的引用数据类型#xff0c;基本数据类型都不知道。看来得好好把基础复习几遍了。总结#…昨天京东笔试的一道选择题被坑了。最近一直在做笔试题发现自己学了两年多的java三大框架什么都会却连基本的拆箱装箱都忘了。昨天考的引用数据类型基本数据类型都不知道。看来得好好把基础复习几遍了。总结两者之间的关系特点一、从概念方面来说基本数据类型:变量名指向具体的数值引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值二、从内存构建方面来说基本数据类型:变量在声明之后java就会立刻分配给他内存空间引用数据类型:它以特殊的方式(类似C指针)指向对象实体(具体的值)这类变量声明时不会分配内存只是存储了一个内存地址。三、从使用方面来说基本数据类型:使用时需要赋具体值,判断时使用“”号引用数据类型:使用时可以赋null,判断时使用equals方法如果面试官问Integer与int的区别估计大多数人只会说道两点Ingeter是int的包装类int的初值为0Ingeter的初值为null(昨天的坑点一)。但是如果面试官再问一下Integer i 1;int ii 1; iii为true还是为false估计就有一部分人答不出来了如果再问一下其他的估计更多的人会头脑一片混乱。所以我对它们进行了总结希望对大家有帮助。首先看代码1 packagecom.test;2 /**3 *4 *author刘玲5 *6 */7 public classTestInteger {89 /**10 *paramargs11 */12 public static voidmain(String[] args) {13 int i 128;14 Integer i2 128;15 Integer i3 new Integer(128);16 //Integer会自动拆箱为int所以为true17 System.out.println(i i2);18 System.out.println(i i3);19 System.out.println(**************);20 Integer i5 127;//java在编译的时候,被翻译成- Integer i5 Integer.valueOf(127);21 Integer i6 127;22 System.out.println(i5 i6);//true23 /*Integer i5 128;24 Integer i6 128;25 System.out.println(i5 i6);//false26 */ Integer ii5 new Integer(127);27 System.out.println(i5 ii5); //false28 Integer i7 new Integer(128);29 Integer i8 new Integer(123);30 System.out.println(i7 i8); //false31 }3233 }首先17行和18行输出结果都为true,因为Integer和int比都会自动拆箱(jdk1.5以上)。22行的结果为true,而25行则为false,很多人都不动为什么。其实java在编译Integer i5 127的时候,被翻译成- Integer i5 Integer.valueOf(127);所以关键就是看valueOf()函数了。只要看看valueOf()函数的源码就会明白了。JDK源码的valueOf函数式这样的1 public static Integer valueOf(inti) {2 assert IntegerCache.high 127;3 if (i IntegerCache.low i IntegerCache.high)4 return IntegerCache.cache[i (-IntegerCache.low)];5 return newInteger(i);6 }看一下源码大家都会明白对于-128到127之间的数会进行缓存Integer i5 127时会将127进行缓存下次再写Integer i6 127时就会直接从缓存中取就不会new了。所以22行的结果为true,而25行为false。对于27行和30行因为对象不一样所以为false。我对于以上的情况总结如下①无论如何Integer与new Integer不会相等。不会经历拆箱过程i3的引用指向堆而i4指向专门存放他的内存(常量池)他们的内存地址不一样所以为false ②两个都是非new出来的Integer如果数在-128到127之间则是true,否则为false java在编译Integer i2 128的时候,被翻译成- Integer i2 Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存 ③两个都是new出来的,都为false ④int和integer(无论new否)比都为true因为会把Integer自动拆箱为int再去比(昨天的坑点二)