为什么人们仍然在 Java 中使用原始类型?

2024-01-07

从 Java 5 开始,我们对原始类型进行了装箱/拆箱,以便int被包裹成java.lang.Integer,等等。

我最近看到了很多新的 Java 项目(确实需要至少版本 5(如果不是 6)的 JREint而不是java.lang.Integer,尽管使用后者更方便,因为它有一些帮助方法可以转换为long价值观等。

为什么要做一些still在Java中使用原始类型?有什么实实在在的好处吗?


在约书亚·布洛赫的书中有效的Java https://rads.stackoverflow.com/amzn/click/com/0321356683,第 5 项:“避免创建不必要的对象”,他发布了以下代码示例:

public static void main(String[] args) {
    Long sum = 0L; // uses Long, not long
    for (long i = 0; i <= Integer.MAX_VALUE; i++) {
        sum += i;
    }
    System.out.println(sum);
}

运行需要43秒。将 Long 放入原语中会将其降低到 6.8 秒...如果这可以说明我们使用原语的原因的话。

缺乏原生价值平等也是一个问题(.equals()相比之下相当冗长==)

对于比比奇普:

class Biziclop {

    public static void main(String[] args) {
        System.out.println(new Integer(5) == new Integer(5));
        System.out.println(new Integer(500) == new Integer(500));

        System.out.println(Integer.valueOf(5) == Integer.valueOf(5));
        System.out.println(Integer.valueOf(500) == Integer.valueOf(500));
    }
}

结果是:

false
false
true
false

EDIT Why does (3) return true and (4) return false?

因为它们是两个不同的对象。最接近零的 256 个整数 [-128; 127] 由 JVM 缓存,因此它们返回相同的对象。但是,超出该范围,它们不会被缓存,因此会创建一个新对象。为了使事情变得更加复杂,JLS 要求at least256 个享元被缓存。 JVM 实现者可以根据需要添加更多,这意味着这可以在缓存最近的 1024 个并且所有这些都返回 true 的系统上运行...#awkward

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么人们仍然在 Java 中使用原始类型? 的相关文章

  • Mockito 在调用参数数量可变的方法时使用参数匹配器

    我试图在对具有可变数量参数的方法的调用中使用参数匹配器 Java 中的东西 没有成功 我的代码如下 我还将列出我尝试用来完成此工作的所有行 import static org mockito Mockito public class Met
  • JPA 中的复合键

    我想创建一个具有自动生成的主键的实体 而且还有一个由其他两个字段组成的唯一复合键 我如何在 JPA 中执行此操作 我想这样做是因为主键应该用作另一个表中的外键 并且使其复合并不好 在下面的代码片段中 我需要命令和模型是唯一的 pk当然是主键
  • Java Runtime.getRuntime().freeMemory() 问题

    我搜索并看到了一些线程 但没有一个能够解决我遇到的具体问题 我正在尝试使用以下方式监视我的内存使用情况Runtime getRuntime freeMemory Runtime getRuntime maxMemory and Runtim
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • “java.net.MalformedURLException:未找到协议”读取到 html 文件

    我收到一个错误 java net MalformedURLException Protocol not found 我想读取网络上的 HTML 文件 mainfest uses permission android name android
  • Spring RestTemplate 使用 cookie 遵循重定向

    最近我遇到了一个问题 我需要做一个GET请求远程服务 我假设使用一个简单的 servlet 并且 RestTemplate 返回Too many redirects 经过一番调查 似乎对指定远程服务发出的第一个请求实际上只是一个 302 重
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • 需要使用 joda 进行灵活的日期时间转换

    我想使用 joda 解析电子邮件中的日期时间字符串 不幸的是我得到了各种不同的格式 例如 Wed 19 Jan 2011 12 52 31 0600 Wed 19 Jan 2011 10 15 34 0800 PST Wed 19 Jan
  • 如何检测 Java 字符串中的 unicode 字符?

    假设我有一个包含 的字符串 我如何找到所有这些 un icode 字符 我应该测试他们的代码吗 我该怎么做呢 例如 给定字符串 A X 我想将其转换为 AYXY 我想对其他 unicode 字符做同样的事情 并且我不想将它们存储在某种翻译映
  • 从 GitHub 上托管的 Spring Cloud Config Server 访问存储库的身份验证问题

    我在 GitHub 上的存储库中托管配置 如果我将回购公开 一切都好 但如果我将其设为私有 我将面临 org eclipse jgit errors TransportException https github com my user m
  • 读取电子邮件的文本文件转换为 Javamail MimeMessage

    我有一个电子邮件原始来源的文本文件 直接从 gmail 复制 如果您单击 查看原始文件 您就会看到它 我想读入该文件并将其转换为 MimeMessage 如果您好奇为什么 我设置了 JavaMaildir 并且需要用电子邮件填充它的收件箱以
  • 流中的非终结符 forEach() ?

    有时 在处理 Java Stream 时 我发现自己需要一个非终端 forEach 来触发副作用但不终止处理 我怀疑我可以用 map item gt f item 之类的方法来做到这一点 其中方法 f 执行副作用并将项目返回到流中 但这似乎
  • HashMap 值需要不可变吗?

    我知道 HashMap 中的键需要是不可变的 或者至少确保它们的哈希码 hashCode 不会改变或与另一个具有不同状态的对象发生冲突 但是 HashMap中存储的值是否需要与上面相同 为什么或者为什么不 这个想法是能够改变值 例如在其上调
  • Docker 和 Eureka 与 Spring Boot 无法注册客户端

    我有一个使用 Spring Boot Docker Compose Eureka 的非常简单的演示 我的服务器在端口 8671 上运行 具有以下应用程序属性 server port 8761 eureka instance prefer i
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • 在 Google App-Engine JAVA 中将文本转换为字符串,反之亦然

    如何从字符串转换为文本 java lang String to com google appengine api datastore Text 反之亦然 Check Javadoc http code google com appengin
  • OpenCSV:将嵌套 Bean 映射到 CSV 文件

    我正在尝试将 bean 映射到 CSV 文件 但问题是我的 bean 具有其他嵌套 bean 作为属性 所发生的情况是 OpenCSV 遍历属性找到一个 bean 然后进入其中并映射该 bean 内的所有数据 如果找到另一个 bean 它就
  • 配置“DataSource”以使用 SSL/TLS 加密连接到 Digital Ocean 上的托管 Postgres 服务器

    我正在尝试托管数据库服务 https www digitalocean com products managed databases on 数字海洋网 https en wikipedia org wiki DigitalOcean 创建了
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数

随机推荐

  • 如何在c中将时间转换为c字符串?

    我想在 c 文件中的 txt 文件中写入一些内容 但需要使用当前时间戳作为后缀来命名该文件 就像 filename 2010 08 19 20 30 一样 所以我得先定义文件名字符数组 然后自己处理文件名 一个一个分配字符 有什么简单的方法
  • 将旧 Unix 日期转换为 Perl 并进行比较

    要求 我的文件名为 Rajesh 1202242219 数字只不过是一个日期 date y m d H M 格式 现在我正在尝试编写一个 perl 脚本来从文件名中提取数字并与当前系统日期和时间进行比较 并根据此比较的输出 使用 perl
  • jQuery DataTable 在按钮单击上设置标题

    在我看来 我有 2 个输入字段 1 个按钮和 1 个我正在使用的表格jQuery 数据表 https datatables net 我正在使用打印功能 https datatables net extensions buttons exam
  • 当用户名包含斜杠时,PuTTY PSCP 错误“不支持本地到本地复制”

    我正在尝试使用 PSCP 将文件从本地 Windows 计算机移动到远程 Linux 服务器 我已连接到 VPN 以便可以使用我的用户名和密码访问远程 Linux 计算机 我的 PSCP 传输命令是 pscp C Users usernam
  • 如何使用 XmlSerializer 反序列化到现有实例?

    是否可以使用 XmlSerializer 将其数据反序列化为类的现有实例而不是新实例 这在两种情况下会很有帮助 轻松地将两个 XML 文件合并到一个对象实例中 让对象构造器本身成为从 XML 文件加载其数据的构造器 如果默认情况下不可能 则
  • servlet 过滤器是否可以确定哪个 servlet 将处理请求

    我正在编写一个执行日志记录的过滤器 如果请求最终到达某个 servlet 我需要禁用此日志记录 有没有办法让过滤器知道哪个 servlet 将处理请求 您可能希望设置 servlet 过滤器映射 以便在请求特定 servlet 时不触发它
  • 如何在 Mac OS X 上启动 mongodb 服务?

    我已经在我的 Mac 上安装了 Mongodb 但该进程当前未运行 如何启动 Mongodb 服务以便可以开始使用命令 如果您使用自制程序在 macOS 上安装 MongoDB 请在终端中键入以下内容 在大多数情况下应该可以解决问题 bre
  • ROWNUM 在分页查询中如何工作?

    所以我想选择 Oracle DB 中的一系列行 我需要这样做 因为我的表中有数百万行 并且我想将结果分页给用户 如果您知道在客户端执行此操作的另一种方法 我正在使用 JavaFX 如果它很重要 但我不这样做认为通过网络发送所有数据以在客户端
  • IOS UIWebView:如何向 DOM 事件添加监听器?

    如何在 UIWebView 中添加 DOM 事件监听器 例如对于以下 html
  • 使

    在 Word 中 您可以将图像放置在页面上 并使文本在其周围流畅地排列 我想知道使用 CSS 可以达到什么程度 并指出它必须在 IE6 中工作 我已经使用浮动进行了某种关闭 但浮动子元素仍然 阻止 其上方的文本 所以它部分包裹 是否可以将子
  • 如何返回变量?

    我正在编写一个程序 将字母翻译成摩尔斯电码 然后将它们传输到 LED 并闪烁 我无法返回值 include
  • 如何使用 jQuery 创建“请稍候,正在加载...”动画?

    我想在我的网站上放置一个 请稍候 加载 旋转圆圈动画 我应该如何使用 jQuery 来完成这个任务 您可以通过各种不同的方式来做到这一点 它可能是微妙的 如页面上显示 正在加载 的小状态 也可能是大声的 如在加载新数据时整个元素使页面变灰
  • JavaScript 中 JSON.stringify() 的替代方案

    在 JavaScript 中 有哪些替代方案JSON stringify 对于没有本机 JSON 支持的浏览器 谢谢 你应该使用图书馆json2 js https github com douglascrockford JSON js 它是
  • Mysql:将数据数组存储在单列中

    并提前感谢您的帮助 嗯 这就是我的情况 我有一个网络系统 可以根据超声波计创建的样本进行一些与噪声相关的计算 最初 数据库只存储这些计算的结果 但现在 我还被要求存储样本本身 每个样本只是 300 或 600 个数字的列表 每个数字有 1
  • ValueError:“对象对于所需数组来说太深”

    我在 Python 程序中遇到 ValueError object too deep fordesired array 我在使用 numpy digitize 时遇到此错误 我认为这就是我使用 Pandas DataFrames 的方式 为
  • LinkedIn 有测试其 API 的平台吗?

    我找不到 Playground 或 API Explorer 来测试 Linkedin API 我在过去两年左右的时间里尝试过 但每次都放弃了 有吗 简单的答案是否定的 没有 API 浏览器或游乐场 BUT然而 linkedin 有一个测试
  • GCC:-static 和 -pie 与 x86 不兼容?

    我正在为 Android 5 0 重新编译一些可执行文件 因为它需要可执行文件PIE 我能够重新编译它ARM只需在配置时添加一些参数 使用独立工具链 export CFLAGS I softdev arm libs include fPIE
  • 使用数组条件跳出循环

    我目前正在为课堂制作一个滑道和梯子游戏 这场比赛的获胜条件是如果玩家落在 Square 100 上 他们就获胜 如果他们碰巧超过了 100 他们会一直呆在那里 直到每个人都完成游戏 要么有人达到 100 要么每个人都超过 100 如果每个人
  • 如何同步从LiveData获取值?

    For LiveData 有没有类似的东西blockingNext or blockingSingle在RxJava的Observable中同步获取值 如果没有 我怎样才能实现相同的行为 您可以致电getValue 返回当前值 如果有 但是
  • 为什么人们仍然在 Java 中使用原始类型?

    从 Java 5 开始 我们对原始类型进行了装箱 拆箱 以便int被包裹成java lang Integer 等等 我最近看到了很多新的 Java 项目 确实需要至少版本 5 如果不是 6 的 JREint而不是java lang Inte