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 ...
随机推荐
- Linux上安装git并在gitlab上建立对应的项目
1.CentOS上面安装git我所用的CentOS为CentOS6.5,其他版本没有测试. yum install git 安装之后查看git版本信息 git --version 2.配置git信息g ...
- IDEA Gradle配置与使用
1.安装Gradle,并添加环境变量. https://www.cnblogs.com/NyanKoSenSei/p/11458953.html 2.在IDEA中设置Gradle: 3.选中项目中的. ...
- Yarn和Zookeeper的区别
Yarn:分布式资源管理器 Zookeeper:分布式协作服务 Zookeeper是一个分布式协调服务(Coordination),一个leader,多个follower组成的集群,就是为用户的分布式 ...
- sql实现MD5加密
select substring(sys.fn_sqlvarbasetostr(HashBytes('MD5','test')),3,32)
- java 查找指定包下的类
package com.jason.test; import java.io.File; import java.io.IOException; import java.io.UnsupportedE ...
- CentOS中使用FIO测试磁盘IO性能
$ yum install fio 0x02 命令 随机读: $ fio -filename=/dev/sda1 -direct=1 -iodepth 1 -thread -rw=randread - ...
- C#中真正的属性
引言 我们以前课堂上说的类当中的“属性”,其实官方叫法是“字段”或者“域”域(Field).正常使用,把它们当属性理解更加方便快捷,也没有什么问题. 如果要在微软的mvc中充分利用类带来的便利,就有必 ...
- Spring Security OAuth2.0 - AuthorizationServer和ResourceServer分离
<Spring Security实现OAuth2.0授权服务 - 基础版>和<Spring Security实现OAuth2.0授权服务 - 进阶版>两篇文章中介绍如何搭建OA ...
- Jemeter学习环境部署。
本文档中所有软件的下载地址 链接:https://pan.baidu.com/s/1RREUwlH7GtYMUWeiRjtWVg 提取码:zmjy 一.安装jdk 下载网盘中的jdk 双击jdk-8u ...
- SpringMVC+EasyUI实现页面左侧导航菜单
1. 效果图展示 2. 工程目录结构 注意: webapp下的resources目录放置easyui和js(jQuery文件是另外的) 3. 代码 index.j ...