java - == 运算符是否比 equals() 更快?
问题描述
我正在学习 String intern() 方法,并且知道 intern() 可以帮助我使用 "==" 运算符而不是 equals() 方法来比较 String 对象,并且一些文档会更快地引用它。不是吗?
解决方案
TL;DR不要==
用来比较字符串。
特别是关于字符串,是的,==
比略快equals
,因为该String.equals
方法所做的第一件事是...==
比较以查看字符串是否与自身进行比较。如果是,equals()
则由于方法调用的成本而变慢。如果不是,equals
则速度会慢于该成本加上比较字符串中字符的成本。
但请记住,在您可以使用==
比较字符串之前(这是一个 Bad Idea™),您必须确定两个字符串都已被保留。intern()
和的组合==
并不比快equals()
。intern()
是一个相对昂贵的操作,因为它涉及在实习生池中寻找一个等效的字符串,这可能涉及大量的equals()
调用(或它们的等价物)。
可能存在一些极其罕见的极端情况,在这些情况下,产生该intern()
成本然后==
在您知道被实习的字符串上使用是合理的。例如,如果您有一大组静态字符串,您会非常频繁地相互比较。但这是一个非常不寻常的边缘情况。
底线:不要将字符串与==
. 不要不必要地实习字符串。
推荐阅读
- python - 如何根据标签训练/测试/拆分数据?
- mysql - 我想获得相同的行名,但我们想获得依赖数据
- twilio - 对于 Twilio Flex 中的语音任务,如何获取当前会议 ConferenceSid?
- python - 查找符合条件的第一行号
- django - celery 在开发过程中无法在 django 应用程序中找到静态文件
- oracle - 如何进行从事务表到平面表的实时数据摄取
- angular - 数据不显示在页面上
- javascript - 如何选择与单击的按钮相同的 div 元素
- sql-server - Azure SQL 执行超时已过期。操作完成前超时时间已过或服务器无响应
- python - 得到一个令人困惑的复杂 mysql 请求工作