Java_MySwap
来源:互联网 发布:树莓派3b 网络配置 编辑:程序博客网 时间:2024/06/05 03:59
package com.tangguoqiang;import java.lang.reflect.Field;/** * 函数调用的值传递和引用传递 * 反射调用的可访问性 * Java编译器的自动装箱拆箱 * Integer自动装箱的缓存 * @author 唐国强 * */public class MySwap { public static void main(String args[]) throws Exception{ //Java中的自动装箱,字节码中Intege a = Integer.valueOf(1); Integer a = 1 , b = 2; System.out.println("原始值:\na="+a+",b="+b); swap(a,b); System.out.println("不使用反射:"); System.out.println("a="+a+",b="+b); swapByReflect(a,b); System.out.println("使用反射"); System.out.println("a="+a+",b="+b); //最终结果修改了Integer的对象缓存值 System.out.println("Integer类1的缓存值为"+Integer.valueOf(1)); System.out.println("Integer类2的缓存值为"+Integer.valueOf(2)); } /** * Java的传值 * Java中按值传递意味着,将一个参数传递给另外一个函数时, * 函数接收到的是原始值的一个副本,因此,不管副本如何变化, * 对于原始值没有任何影响。 * Java中按引用传递,它传递的是引用副本指向自己的地址,而不是自己的副本。 * @param a * @param b */ private static void swap(Integer a , Integer b){ Integer temp; temp = a; a = b; b = temp; } /** * Java的反射 * 私有成员属性不能直接通过反射赋值,f.setAccessible(true);,底层关闭了访问权限的验证机制。 * * Java的自动装箱和拆箱 * Integer a = 1; JVM会自动装箱成为Integer a = Integer.valueOf(i); 。 * 如果i的值在IntegerCache.low到IntegerCache.high之间,那么就直接从IntegerCache里面去获取。 * 如果i超过了这个范围,那么就会新建一个Integer类型的对象,这个默认值是在-128到127之间。 * @param a * @param b * @throws SecurityException * @throws NoSuchFieldException */ private static void swapByReflect(Integer i1, Integer i2) { try {Field field = Integer.class.getDeclaredField("value");field.setAccessible(true);//获取私有成员访问权限Integer temp = new Integer(i1.intValue());//int temp = i1.intValue();使用Integer默认缓存,错误结果field.set(i1, i2.intValue());//发生自动装箱field.set(i2, temp);//如果使用int类型传参会发生自动装箱} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {e.printStackTrace();} }}
阅读全文
0 0
- Java_MySwap
- php运行报错Call to undefined function curl_init()
- oracle修改序列从指定值开始递增
- jquery获取ajax成功请求的返回值,并返回给其他函数使用
- 数据结构与算法分析(Java语言描述)(13)—— 原地堆排序
- LTE物理传输资源(2)-频带、信道带宽和频点号EARFCN
- Java_MySwap
- Html5新标签解释及用法(转载)
- Failed to resolve: com.android.support:appcompat-v7:27.+
- java窗体---加入购物车
- 【推荐】PHP-集成函数总结
- osgEarth多文件读取 12.gdal_multiple_files.earth
- GD库函数学习【笔记】
- 网络
- 修改JAVA_HOME之后,Java版本保持不变的解决方法