java chars_为什么在Java 8中String.chars()是一个整数流?
小编典典
92
Skiwi的答案已经涵盖了许多要点。我会再填一些背景。
任何API的设计都是一系列折衷。在Java中,困难的问题之一是处理很久以前做出的设计决策。
从1.0开始,基元就已经在Java中使用。它们使Java成为“不纯的”面向对象的语言,因为基元不是对象。我相信添加原语是一个务实的决定,它以牺牲面向对象的纯度为代价来提高性能。
这是将近20年后的今天,我们仍然需要权衡的问题。Java 5中添加的自动装箱功能主要消除了使用装箱和拆箱方法调用使源代码混乱的问题,但开销仍然存在。在许多情况下,它并不明显。但是,如果要在一个内部循环中执行装箱或拆箱,您会发现它会带来大量的CPU和垃圾回收开销。
在设计Streams API时,很明显,我们必须支持原语。装箱/拆箱的开销会扼杀并行性带来的任何性能优势。但是,我们并不想支持所有的原语,因为那样会给API增加很多麻烦。(您真的看到了“ a”的用法ShortStream吗?)“全部”或“无”是设计的理想位置,但都不可接受。因此,我们必须找到“ some”的合理值。我们结束了与原始的专长int,long和double。(就我个人而言,我会被排除在外,int但那只是我。)
因为CharSequence.chars()我们考虑过退货Stream(早期的原型可能已经实现了),但由于装箱费用而被拒绝。考虑到字符串具有char作为原始值的字符串,当调用者可能只是对该值进行一点处理并将其重新装箱回到字符串中时,无条件施加装箱似乎是一个错误。
我们还考虑了CharStream原始的专业化,但是与它添加到API的批量数量相比,它的使用似乎非常狭窄。似乎没有必要添加它。
这给调用者带来的代价是,他们必须知道IntStream包含char表示为的值,ints并且必须在正确的位置进行转换。这使人们倍感困惑,因为有大量的API调用,例如PrintStream.print(char)和PrintStream.print(int),其行为明显不同。可能会引起另一个混乱点,因为该codePoints()调用还会返回一个,IntStream但其中包含的值却大不相同。
因此,这归结为在几种选择中务实地选择:
我们无法提供原始的专业知识,因此会产生简单,优雅,一致的API,但会带来高性能和GC开销;
我们可以提供一套完整的原始专业知识,但代价是使API混乱不堪,并给JDK开发人员带来了维护负担;要么
我们可以提供原始专业化的子集,从而提供中等大小的高性能API,从而在相当狭窄的用例范围(字符处理)中为调用者带来相对较小的负担。
我们选择了最后一个。
2020-11-06
java chars_为什么在Java 8中String.chars()是一个整数流?相关推荐
- java字符串怎么拼接字符串_Java中String使用+ 拼接字符串的原理是什么?
来看一段代码 public class Test { String str1 = "51"; String str2 = "manong"; String st ...
- java 整型减去字符_Java:从char中减去’0’得到一个整数……为什么这个有效?...
这工作正常: int foo = bar.charAt(1) - '0'; 但这不是-因为bar.charAt(x)返回一个char: int foo = bar.charAt(1); 似乎从char ...
- java命令 jar文件夹_java中jar命令打包一个文件夹下的所有文件
(1)首先,必须保证java的所有路径都设置好,在dos提示符下输入jar -help 出现C:\Documents and Settings\dly>jar -help 非法选项:h 用法:j ...
- java判断整数是奇数还是偶数_没那么简单:Java中应该怎样判断一个整数是偶数还是奇数...
环境:jdk 1.7. 一般用模2运算判断一个整数是偶数还是奇数.但是对于奇数,不能简单的用x%2==1来判断,原因如下: package hellojava; public class HelloJ ...
- java arraylist与数组转换_java中String,数组,ArrayList三者之间的转换
免费资源网 - https://freexyz.cn/ ArrayList转为String和数组 造一个元素为Integer的ArrayList 为list_int 造一个元素为String 的 Ar ...
- java kt_java – 我无法理解kotlin中string.kt的源代码实现
在kotlin源代码中,我无法理解如何实现String.kt的长度,如下: package kotlin public class String : Comparable, CharSequence ...
- java弹出窗放textarea_java中窗体上有一个Button和一个TextArea当鼠标经过按钮上的某一点时在文本框中输出该点的坐标事件...
展开全部 你好!只需要在按钮上32313133353236313431303231363533e59b9ee7ad9431333264636163添加鼠标监听器监听鼠标经过事件就可以了 核心代码: p ...
- java图片点击事件_java中想要点击一个button然后jlabel上就显示出图片,button事件监听该怎么写。...
展开全部 给个例子你参考一下:给按钮62616964757a686964616fe4b893e5b19e31333332643864bntOk添加监听事件 bntOk.addMouseListener ...
- java 里button的功能_java中怎么通过摁一个按钮显示一个图片的功能
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 import java.awt.*; import javax.swing.*; import java.awt.event.*; public clas ...
- JAVA基础--JAVA中的反射机制详解
JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能 ...
最新文章
- 做支付遇到的HttpClient大坑(一)
- Swagger生成的接口需要权限验证的处理方法
- Linux的软硬链接ln
- linux 设置服务自启动
- ajax参数中有加号,浅谈在js传递参数中含加号(+)的处理方式
- 解读年度数据库PostgreSQL:如何巧妙地实现缓冲区管理器
- Git安装配置与GitHub注册及简单使用
- C/C++ map函数统计每个字母出现的次数
- 前端纯css 图片的模糊处理
- spss20安装许可证代码_SPSS 22下载安装教程
- 客户管理软件系统源码
- 道一MD5校验工具发布
- C# winform 界面美化技巧(扁平化设计)
- 公司来了一个low逼程序员,进程线程面试题总结
- windows上配置IIS全过程
- 预测大盘最准确的指标_杨守东:自己用多年预测大盘顶底指标公式
- C++ Parent和Child继承分析
- Mac OS X 10.8.3搭建Android工程源码的编译环境(解决找不到GCC、GIT、PYTHON的问题)...
- 临时起搏器测试----概念梳理
- 送给大家一个把阿拉伯数字与罗马数字互换的代码 -.- 仅支持4000以下的转化
热门文章
- Java同步数据结构之Collection-Queue
- Java的split()用法
- [ASP.NET]NTKO插件使用常见问题
- 关于Centos Linux系统安装Python的问题
- 4、第4次课 CSS代码第三节课20150923
- 冒泡排序(数组排序不用Array.Sort)
- webvector将html转为svg或者png图片的工具
- 基于地理位置标记的空间聚类分析(python-DBSCAN)
- 和opengl的关系_从零开始的图形学学习(零):一切的开始 —— 自建OpenGL开发框架...
- Flutter实战之Sqlite的用法入门