法律英语翻译,圣博梦想岛,nlb
废话不多说----->直接上代码:
public class integerdemo { public static void main(string[] args) { integer numa = 127; integer numb = 127; integer numc = 128; integer numd = 128; system.out.println("numa == numb : "+ (numa == numb)); system.out.println("numc == numd : "+ (numc == numd)); } }
结果:
numa == numb : true numc == numd : false
what?这个输出结果怎么跟以往的认知有所出入呢?在我们的代码“integer numa = 127”中,编译器会把基本数据的“自动装箱”(autoboxing)成包装类,所以这行代码就等价于“integer numa = integer.valueof(127)”了,这样我们就可以进入valueof方法查看它的实现原理。
integer类的源码 private static class integercache { static final int low = -128; static final int high = 127; static final integer cache[]; ...... } public static integer valueof(int i) { if (i >= integercache.low && i <= integercache.high) return integercache.cache[i + (-integercache.low)]; return new integer(i); }
从上面的源码可以看到,valueof方法会先判断传进来的参数是否在integercache的low与high之间,如果是的话就返回cache数组里面的缓存值,不是的话就new integer(i)返回。
----------------------------------------------------------------------------------------------------------------------------------------
那我们再往上看一下integercache,它是integer的内部静态类,low默认是-128,high的值默认127,但是high可以通过jvm启动参数xx:autoboxcachemax=size来修改(如图),如果我们按照这样修改了,然后再次执行上面代码,这时候2次输出都是true,因为缓存的区间变成-128~200了。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
浅析我对 String、StringBuilder、StringBuffer 的理解
使用IDEA搭建SSM框架的详细教程(spring + springMVC +MyBatis)
Springboot整合freemarker 404问题解决方案
引入mybatis-plus报 Invalid bound statement错误问题的解决方法
网友评论