java自动拆包/装包易错点(AutoBoxing)
来源:互联网 发布:js获取input的name值 编辑:程序博客网 时间:2024/05/22 17:26
在牛客上遇见一道java :
public class Test { public void add(Byte b) { b=b++; } public void test() { Byte a=127; Byte b=127; add(++a); System.out.println(a+""); add(b); System.out.println(b); },原题判断输出情况:
byte范围:-128~127;
执行++a时候,a会上溢变为-128,
传入add()函数时候,引用,原本会改变其值,在执行b=b++;时候。为基本值,退出函数时不会改变Byte型的值。
nailperry上传的反编译字节码:
// 源代码 public static void main(String[] args) { Byte a = 127; ++a; } // 字节码 public static void main(java.lang.String[]); Code: 0: bipush 127 // 将一个byte型常量值推送至操作数栈栈顶 2: invokestatic #2 // 自动装箱:访问栈顶元素,作为函数实参传入静态方法Byte.valueOf(byte), // 返回value值为127的Byte对象的地址,并压栈 5: astore_1 // 将栈顶数值赋值给局部变量表中下标为1的引用型局部变量a,栈顶数值出栈。此时a对应的byte值为127。 6: aload_1 // 局部变量表中下标为1的引用型局部变量a进栈 7: invokevirtual #3 // 自动拆箱,访问栈顶元素a,调用实例方法a.byteValue获取a所指Byte // 对象的value值,并压栈 10: iconst_1 // int型常量值1进栈 11: iadd // 依次弹出栈顶两int型数值1(0000 0001)、127(0111 1111) //(byte类型自动转型为int类型)相加,并将结果128(1000 0000)进栈 12: i2b // 栈顶int值128(1000 0000)出栈,强转成byte值-128(1000 0000),并且结果进栈 13: invokestatic #2 // 自动装箱:访问栈顶元素,作为函数实参传入静态方法Byte.valueOf(byte), // 返回value值为-128的Byte对象的地址,并压栈 16: astore_1 // 将栈顶数值赋值给局部变量表中下标为1的引用型局部变量a,栈顶数值出栈。此时a对应的byte值为-128。 17: return }
0 0
- java自动拆包/装包易错点(AutoBoxing)
- java自动拆箱(unboxing)/装箱(autoboxing)
- Java中的自动封包和解包(Autoboxing和AutoUnboxing)
- Autoboxing(自动装箱)
- 自动装箱(Autoboxing)
- 自动装箱(autoboxing)
- java进阶--深入理解Java自动装箱拆箱机制(Autoboxing and unboxing)
- 自动装箱(autoboxing)与自动拆箱(unboxing)
- 自动装箱(autoboxing)与自动拆箱(unboxing)
- 自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)
- java的自动装箱(autoboxing)和拆箱(unboxing)
- Java的自动装箱(autoboxing)和拆箱(unboxing)
- 说说java的自动装箱(autoboxing)和拆箱(unboxing
- 说说java的自动装箱(autoboxing)和拆箱(unboxing
- Java 自动装箱与拆箱(Autoboxing and unboxing)
- Java 自动装箱与拆箱(Autoboxing and unboxing)
- Java 自动装箱与拆箱(Autoboxing and unboxing)
- Java 自动装箱与拆箱(Autoboxing and unboxing)
- <JAVA EE>web.xml命名与定制URL
- Mybatis通用DAO设计封装(mybatis)
- 51nod1099 任务执行顺序(贪心)
- Apache中文官网全面战略合作伙伴关系
- 201412-2
- java自动拆包/装包易错点(AutoBoxing)
- Intellij IDEA 创建Web项目并在Tomcat中部署运行
- tf.nn.conv2d理解
- NSIS检测并卸载已有版本,静默卸载隐藏MessageBox
- iOS OpenCV 图像灰度处理
- 安装ubuntu以及mysql ,mysql-workbench遇见的一些问题及其解决方法
- Ubuntu环境下编译V8
- 如何快速熟悉项目代码
- java浅拷贝和深拷贝