原始类型特化

引言

上篇我们介绍了三个函数式接口:Predicate<T>、Consumer<T>、Function<T,R> 。还有一些函数式接口是专门为某些类型涉及的。https://www.jianshu.com/p/4c93e1f7c19b

Java 类型

  • 引用类型(如 Byte、Integer、Long、Object、List)
  • 原始类型(byte、short、int、float、double、long、char、boolean)

回顾知识点:

  • Java 类型要么是引用类型,要么是原始类型。
  • 泛型只能绑定到引用类型上面、这是由泛型内部的实现方式造成的。
  • 在 Java 中有一个将原始类型转换为对应的引用类型的机制、这个机智就叫做装箱。相反的操作、也就是将引用类型转换成对应的原始类型的机制,这种机智叫做拆箱。Java 还有一个自动装拆箱的机智来帮助我们程序员执行这一任务:装箱和拆箱都是自动完成的。

注意:

虽然 Java 提供了自动装拆箱的机智,但这在性能方面是要付出代价的,装箱的本质是就是把原始类型包裹起来,并保存在堆里。因此、装箱后的值需要更多的内存、并需要额外的内存搜索来获取被包裹的值。因此、为提高程序的执行效率、Java 8 为我们前面所提到的函数式接口提供了一个专门的版本、以便在输入和输出都是原始类型时避免自动装拆箱的操作。

举例

//IntPredicate 源码

@FunctionalInterface
public interface IntPredicate {

    /**
     * Evaluates this predicate on the given argument.
     *
     * @param value the input argument
     * @return {@code true} if the input argument matches the predicate,
     * otherwise {@code false}
     */
    boolean test(int value);
  
    // 其他默认方法省略
    ...
}

说明

IntPredicate 源码解析:IntPredicate 类的 test方法接收一个原始类型 int类型的入参,其返回值为 boolean,避免了输入和输出都是原始类型时自动装拆箱的操作。

Java 8中的常用函数式接口

常用函数式接口

Lambdas及函数式接口的例子

Lambdas及函数式接口的例子


推荐书籍

  • 《Java 8 in Action》
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 九种基本数据类型的大小,以及他们的封装类。(1)九种基本数据类型和封装类 (2)自动装箱和自动拆箱 什么是自动装箱...
    关玮琳linSir阅读 1,939评论 0 47
  • Java8 in action 没有共享的可变数据,将方法和函数即代码传递给其他方法的能力就是我们平常所说的函数式...
    铁牛很铁阅读 1,276评论 1 2
  • 第一章 为什么要关心Java 8 使用Stream库来选择最佳低级执行机制可以避免使用Synchronized(同...
    谢随安阅读 1,520评论 0 4
  • 所有知识点已整理成app app下载地址 J2EE 部分: 1.Switch能否用string做参数? 在 Jav...
    侯蛋蛋_阅读 2,531评论 1 4
  • 原文链接:https://github.com/EasyKotlin 到目前为止,我们已经了解了Kotlin的基本...
    JackChen1024阅读 2,689评论 0 3