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 ...
随机推荐
- python对图片批量命名
深度学习中经常会有批量对图片进行重命名,从网上看到的资料整理一下,方便以后查看. import os class BatchRename(): ''' 批量重命名文件夹中的图片文件 ''' def _ ...
- React-native升级方法
React-native升级方法: 官网升级说明 中文版官网说明 各个版本差异对比
- flowable ui 界面请假流程操作实例
如题,网上的教程多是代码居多,UI界面操作实例那更是一页难求,楼主分享下几天来的入坑经历,希望有需要了解,但是不知道去哪里了解的小伙伴,看完我的文章后能有所启发,文章有不足之处还请指正,若有相关问题请 ...
- Baidu UEditor .net 下修改默认上传路径
public override void Process() { byte[] uploadFileBytes = null; string uploadFileName = null; if (Up ...
- EXT.net 1.x TreePanel的一个坑
Ext.net TreePanel有一个方法 drptreepanel.setChecked({ ids: idsarray, silent: true }); 如果TreePanel里有1,3两个 ...
- SpringBootSecurity学习(18)前后端分离版之 OAuth2.0 数据库(MyBatis)存储客户端
使用Mybatis查询客户端信息 前面的例子使用了默认的jdbc配置来动态从数据库查询客户端信息,下面来改用更加灵活的mybatis来实现,改用mybatis,首先pom中换成mybatis的依赖: ...
- python numPy模块 与numpy里的数据类型、数据类型对象dtype
学习链接:http://www.runoob.com/numpy/numpy-tutorial.html 官方链接:https://numpy.org/devdocs/user/quickstart. ...
- python基础06--文件操作
1.1 文件操作 1.只读(r,rb) rb以bytes方式读文件 只写(w,wb) 追加(a,ab) r+ 读写 w+ 写读 a+ 追加写读 以什么编码方式储存的文件,就用什么编码方式打开 ...
- 安装多个jdk导致eclipse打不开问题
问题描述 本来使用的是jdk1.8,由于其他原因需要使用jdk1.6,在安装完jdk1.6后打开eclipse就会报错: Version 1.6.0_43 of the JVM is not suit ...
- Java自学-数字与字符串 操纵字符串
Java常见字符串方法 示例 1 : 获取字符 charAt(int index)获取指定位置的字符 package character; public class TestString { publ ...