简单复习下

基本数据类型值传递

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

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);
}

Java 中函数式编程方法形参为基本类型和引用类型的更多相关文章

  1. Java Native Interface 二 JNI中对Java基本类型和引用类型的处理

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 Java编程里会使用到两种类型:基本类型(如 ...

  2. paip. java的 函数式编程 大法

    paip. java的 函数式编程 大法 Java 语言中常被忽视的一个方面是它被归类为一种命令式(imperative)编程语言.命令式编程虽然由于与 Java 语言的关联而相当普及,但是并不是惟一 ...

  3. paip.函数式编程方法概述以及总结

    paip.函数式编程方法概述以及总结 1     函数式编程:函数式风格..很多命令式语言里支持函数式编程风格 1.1      起源 (图灵机,Lisp机器, 神经网络计算机) 1.2      函 ...

  4. 可爱的 Python : Python中函数式编程,第一部分

    英文原文:Charming Python: Functional programming in Python, Part 1 摘要:虽然人们总把Python当作过程化的,面向对象的语言,但是他实际上包 ...

  5. Java Stream函数式编程案例图文详解

    导读 作者计划把Java Stream写成一个系列的文章,本文只是其中一节.更多内容期待您关注我的号! 一.什么是Java Stream? Java Stream函数式编程接口最初是在Java 8中引 ...

  6. Java Stream函数式编程图文详解(二):管道数据处理

    一.Java Stream管道数据处理操作 在本号之前发布的文章<Java Stream函数式编程?用过都说好,案例图文详解送给你>中,笔者对Java Stream的介绍以及简单的使用方法 ...

  7. Java 8 函数式编程

    今天打开Oracle Java官网一看,Java已经更新到 13 了 https://www.oracle.com/technetwork/java/javase/jdk-relnotes-index ...

  8. 浅谈Java中的hashcode方法

    哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...

  9. 千万不要误用 java 中的 HashCode 方法

    刚才debug追堆栈的时候发现一个很奇怪的问题 我用IE8和Google的浏览器访问同一个地址 Action的 scope="session" 也设置了 而且两个浏览器提交的参数m ...

随机推荐

  1. javascript系列--认识并理解构造函数,原型和原型链

    一.前言 介绍构造函数,原型,原型链.比如说经常会被问道:symbol是不是构造函数:constructor属性是否只读:prototype.[[Prototype]]和__proto__的区别:什么 ...

  2. jenkins更新为国内源

    系统管理->插件管理->高级->升级站点->URL https://jenkins-zh.gitee.io/update-center-mirror/tsinghua/upda ...

  3. Windows彻底卸载VMWare虚拟机详细步骤

    不能卸载vmware ,原因是VMware的服务在运行中,停止服务就可以卸载了. 点击开始输入[services.msc],然后点击搜索到服务. 找到这个软件的图一的所有项,然后右键它属性. 全部设置 ...

  4. 【Python开发】anaconda3 安装python包

    环境说明 电脑配置:win7 64位 安装版本:anaconda3 Python 3.6 参考链接 http://python.jobbole.com/86236/ (链接中有一个小点介绍了如何加速包 ...

  5. TreeMap源码分析1

    二叉树他们都需要满足一个基本性质--即树中的任何节点的值大于它的左子节点,且小于它的右子节点.按照这个基本性质使得树的检索效率大大提高.我们知道在生成二叉树的过程是非常容易失衡的,最坏的情况就是一边倒 ...

  6. SQLServer---------使用Excel 往sqlServer数据库中导入数据

    1.右击创建好的表选择编辑200行 2.保证Excel的字段顺序与数据中顺序一致 3.选中好了后进行复制 4.打开文本   一个快捷方式 将excel 中的数据 黏贴放到文本中 5.点击sql    ...

  7. ElasticSearch 线程池类型分析之 ExecutorScalingQueue

    ElasticSearch 线程池类型分析之 ExecutorScalingQueue 在ElasticSearch 线程池类型分析之SizeBlockingQueue这篇文章中分析了ES的fixed ...

  8. 关于AQS的一点总结

    关于AQS的一点总结 2017年03月13日 09:48:13 那只是一股逆流 阅读数:772    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/ ...

  9. golang输出双精度浮点例子(Printf)

    1 package main import "fmt" func main() { var sum int = 17 var count int = 5 var mean floa ...

  10. C# System.Reflection.Assembly动态加载资源文件

    需求:需要做甘特图的显示,并且在甘特中加载图片.图片太多,写判断代码太多.用反射吧. 核心代码: try { if (stateColour < 0) return null; System.R ...