zoukankan      html  css  js  c++  java
  • Java 中函数式编程方法形参为基本类型和引用类型

    简单复习下

    基本数据类型值传递

    值传递,原变量的值不会被修改

    private final Consumer sout = System.out::println;
    
        @Before
        public void init() {
        }
    
        /**
         * 基本数据类型值传递
         * 值传递,原变量的值不会被修改
         */
        @Test
        public void basicDataType() {
            final BiConsumer<Integer, Integer> biConsumer = (a, b) -> {
                // 11 ^ 101 = 110
                a = a ^ b;
                // 110 ^ 101 = 011
                b = a ^ b;
                // 110 ^ 011 = 101
                a = a ^ b;
            };
    
            int a = 3, b = 5;
            biConsumer.accept(a, b);
    
            sout.accept(a);
            sout.accept(b);
        }

    传递数组类型的引用

    结果值全部为1,全部被修改

    @Test
        public void array() {
            Consumer<int[]> consumer = (int[] arr) -> Arrays.fill(arr, 1);
            int[] arr = {1, 2, 3, 4, 5};
            consumer.accept(arr);
    
            for (int i = 0; i < arr.length; i++) {
                sout.accept(arr[i]);
            }
        }

    方法形参为对象

    * 如果在方法内部修改该对象的属性,外部引用属性值会跟着变化
    * 如果在方法内部修改该引用,外部不会发生变化

    @Test
        public void object() {
            Consumer<DotaHero> setNameSF = (d) -> d.setName("SF");
            DotaHero sf = new DotaHero();
            setNameSF.accept(sf);
    
            // DotaHero(name=SF, kind=null, sex=null)
            // 引用的属性被修改
            sout.accept(sf);
    
            DotaHero karl = new DotaHero();
            karl.setName("karl");
    
            BiConsumer<DotaHero, DotaHero> swap = (s, k) -> {
                DotaHero temp;
                temp = s;
                s = k;
                k = temp;
            };
    
            // 未被更改
            // DotaHero(name=SF, kind=null, sex=null)
            // DotaHero(name=karl, kind=null, sex=null)
            sout.accept(sf);
            sout.accept(karl);
    
    
            Consumer<DotaHero> setNameKarl = (d) -> {
                DotaHero temp = d;
                temp.setName("karl");
            };
    
            setNameKarl.accept(sf);
            // 被更改
            // DotaHero(name=karl, kind=null, sex=null)
            sout.accept(sf);
        }
  • 相关阅读:
    [JavaWeb基础] 001.简单的JavaWeb代码和Tomcat配置部署
    [程序员短壁纸]2015年05月
    [注]什么是用户?估计90%人不知道
    [注]排行榜相关知识
    [注]微信公众号的运营推广总结方案(持续更新)
    [注]6W运营法则教你盘活社区内容运营
    [注]一条牛B的游戏推送要具备哪些条件?
    [微信营销企划之路]001.环境搭建(XAMPP+WeiPHP)
    [Python基础]005.语法(4)
    Java多线程设计模式
  • 原文地址:https://www.cnblogs.com/theRhyme/p/11577132.html
Copyright © 2011-2022 走看看