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);
}
Java 中函数式编程方法形参为基本类型和引用类型的更多相关文章
- Java Native Interface 二 JNI中对Java基本类型和引用类型的处理
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 Java编程里会使用到两种类型:基本类型(如 ...
- paip. java的 函数式编程 大法
paip. java的 函数式编程 大法 Java 语言中常被忽视的一个方面是它被归类为一种命令式(imperative)编程语言.命令式编程虽然由于与 Java 语言的关联而相当普及,但是并不是惟一 ...
- paip.函数式编程方法概述以及总结
paip.函数式编程方法概述以及总结 1 函数式编程:函数式风格..很多命令式语言里支持函数式编程风格 1.1 起源 (图灵机,Lisp机器, 神经网络计算机) 1.2 函 ...
- 可爱的 Python : Python中函数式编程,第一部分
英文原文:Charming Python: Functional programming in Python, Part 1 摘要:虽然人们总把Python当作过程化的,面向对象的语言,但是他实际上包 ...
- Java Stream函数式编程案例图文详解
导读 作者计划把Java Stream写成一个系列的文章,本文只是其中一节.更多内容期待您关注我的号! 一.什么是Java Stream? Java Stream函数式编程接口最初是在Java 8中引 ...
- Java Stream函数式编程图文详解(二):管道数据处理
一.Java Stream管道数据处理操作 在本号之前发布的文章<Java Stream函数式编程?用过都说好,案例图文详解送给你>中,笔者对Java Stream的介绍以及简单的使用方法 ...
- Java 8 函数式编程
今天打开Oracle Java官网一看,Java已经更新到 13 了 https://www.oracle.com/technetwork/java/javase/jdk-relnotes-index ...
- 浅谈Java中的hashcode方法
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...
- 千万不要误用 java 中的 HashCode 方法
刚才debug追堆栈的时候发现一个很奇怪的问题 我用IE8和Google的浏览器访问同一个地址 Action的 scope="session" 也设置了 而且两个浏览器提交的参数m ...
随机推荐
- suface 触控笔
触控笔直接就可以书写,顶部橡皮擦可用. 但如果要使用笔上的按键(如单击启动OneNote),必须要用蓝牙进行配对.笔使用一节AAAA电池(九号电池)供电. 连接方法: 准备好surface触控笔,并确 ...
- 使用 KVO 可能会拖慢启动速度
问题  在某一次启动速度优化中,发现最开始的某个 runLoop 中,一个runLoop 耗时很长.发现一个 KVO 变量的初始化消耗了13ms之久,这对启动速度是不可接受了. 源码分析 用 Ins ...
- 串口调试工具与com口编程
当我们要与称打印机进行交互的时候这就需要 驱动 只有得到对应产品的驱动我们才有机会对其进行 com 口编程 首先我们就需要一个小工具来进行测试 获取对应的com 口,观察数据传输方式 链接地址: 链 ...
- Ansible14:Playbook条件语句
目录 简介 when关键字 1. when基本使用 2. 比较运算符 3. 逻辑运算符 条件判断与tests 判断变量 判断执行结果 判断路径 判断字符串 判断整除 其他tests 条件判断与bloc ...
- Java 中将字符串数组转换为字符串
Java 中将字符串数组转换为字符串 import java.util.Arrays; import java.util.HashSet; import java.util.Set; public c ...
- Lua table concat
[1]table concat 简介 使用方式: table.concat(table, sep, start, end) 作用简介: concat是concatenate(连锁.连接)的缩写. ta ...
- Nginx官方文档翻译(转)
add by zhj: 由并发网组织翻译,赞 <Nginx官方文档>WebSocket代理 <Nginx官方文档>配置文件中的单位 <Nginx官方文档>控制ngi ...
- python利用dijkstra算法求解图中最短距离
利用dijkstra算法,来完成图中两个顶点间最短的距离,可以直接复制使用,只需要修改参数即可 def dijkstra_raw(edges, from_node, to_node): "& ...
- 『正睿OI 2019SC Day5』
网络流 网络流的定义 一个流网络\(G=(V,E)\)为一张满足以下条件的有向图: 每一条边有一个非负容量,即对于任意\(E\)中的\((u,v)\) , 有\(c(u,v)\geq0\). 如果\( ...
- UserAgentUtils 获取浏览器信息
<dependency> <groupId>eu.bitwalker</groupId> <artifactId>UserAgentUtils</ ...