zoukankan      html  css  js  c++  java
  • Java内存地址基本数据类型的值互换问题

    因为基本数据类型是值传递的,所以如果值互换会导致获得一样的值,这时需要使用反射来进行解决问题。

    public class SwapDemo {
        public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
            Integer a = 1, b = 2;
            System.out.println("before:a = " + a + " b=" + b);//预期:a = 1, b = 2
            //a和b值互换
            swap(a,b);
            System.out.println("after:a=" + a + " b=" + b);//预期:a = 2, b = 1
        }
        public static void swap(Integer i1, Integer i2) throws NoSuchFieldException, IllegalAccessException {
            //通过反射原理来进行值的改变
            //因为Integer内部是一个final 的 int 基本数据类型,所以这是值传递,不能改变
            Field field = Integer.class.getDeclaredField("value");
            field.setAccessible(true);
            Integer temp = new Integer(i1.intValue());//这一步很关键,这是需要改变原来i1的地址值,否则temp会因为下一步变为2
            field.set(i1,i2.intValue());
            field.set(i2,temp);
        }
  • 相关阅读:
    sqlplus中文问号
    mysql8.0 Authentication plugin 'caching_sha2_password' cannot be loaded
    Idea2018激活
    bzoj-5049-线段树
    HDU-6070-二分+线段树
    Aizu-2200-floyd+dp
    bzoj-4565-区间dp+状压
    bzoj-3195-状压dp
    bzoj-4870-组合dp+矩阵幂
    swiper使用心得
  • 原文地址:https://www.cnblogs.com/wk-missQ1/p/14746954.html
Copyright © 2011-2022 走看看