放箱是什么意思
解决时间 2021-05-25 10:49
- 提问者网友:献世佛
- 2021-05-25 03:54
最佳答案
- 五星知识达人网友:从此江山别
- 2021-05-25 05:32
3 Autoboxing and Unboxing 自动装箱与解箱3.1 Converting Primitives to Wrapper Types 看一下代码 int foo = 0; Integer integer = foo; 反编译class文件看到 int foo = 0; Integer integer = Integer.valueOf(foo); 是编译器帮助做了类型转换,各原始类型分别与它wrapper之间对应 Number n = 0.0f; 上面的申明显示从float转到Float,再从Float转到Number3.2 Converting Wrapper Types to Primitives 看一下代码 Integer integer = 1; int i = integer; 反编译class文件看到 Integer integer = Integer.valueOf(1); int i = integer.intValue(); 先装箱再解箱,从上代码可以看出,如果 Integer integer = null; int i = integer.intValue(); 那么这个代码必定报NullPointerException,所以在解箱的时候需特别注意这点3.3 Incrementing and Decrementing Wrapper Types 看一下代码 Integer counter = 1; while (counter<10) 反编译class文件看到 Object aobj[]; for(Integer counter = Integer.valueOf(1); counter.intValue() < 10; System.out.printf("Iteration %d%n", aobj)) 在这里我们看到自增长运算符++在这里也是可以使用的,编译后实际上在在int上操作,然后再赋给counter3.4 Boolean Versus boolean 看一下代码A Boolean case1 = true; Boolean case2 = true; boolean case3 = false; Boolean result = (case1 || case2) && case3; 反编译class文件看到 Boolean case1 = Boolean.valueOf(true); Boolean case2 = Boolean.valueOf(true); boolean case3 = false; Boolean result = Boolean.valueOf((case1.booleanValue() || case2.booleanValue()) && case3); 在进行或运算和与运算的时候都用到了unboxing,然后再把结果autoboxing For inquiring minds, primitives are boxed up to wrapper types in equality comparisons. For operators such as <, >=, and so forth, the wrapper types are unboxed to primitive types. 看一下代码B Integer i1 = 256; Integer i2 = 256; if (i1 == i2) else 在大多数的jvm里返回的是not equal,==运算符直接是对两个object intances的比较,不多内存地址,结果当然是not equal,当然也有少部分最优化的jvm可能会返回equal,如果优化的策略是创建一个insta
我要举报
大家都在看
推荐资讯