java swap(Integer a ,Integer b)实现交换?
问题如下:
public static void main(String[] args) {
Integer a=1, b=2;
System.out.println("before:a=" + a + ", b=" + b);
swap(a,b);
System.out.println("after:a=" + a + ", b=" + b);
}
public static void swap(Integer num1, Integer num2) {
Integer tmp = num1;
num1= num2;
num2= tmp;
}
输出结果为:
before:a=1, b=2
after:a=1, b=2
实际的jvm内存交互如下,实际a,b并没有发生交换

试验1:利用Java中的反射
Integer为对象,可以通过反射来改变对象中的属性
public static void main(String[] args) {
Integer a=1, b=2;
System.out.println("before:a=" + a + ", b=" +

本文探讨了在Java中尝试使用反射交换两个Integer对象的值时遇到的问题。当数值在-128到127之间时,Integer对象会使用缓存,导致交换操作未按预期进行。通过反汇编和分析,揭示了交换失败的原因:反射修改了缓存中的值,而非原始变量,最终导致两个对象都持有相同的值。
最低0.47元/天 解锁文章
779

被折叠的 条评论
为什么被折叠?



