首页 > 解决方案 > == 运算符是否比 equals() 更快?

问题描述

我正在学习 String intern() 方法,并且知道 intern() 可以帮助我使用 "==" 运算符而不是 equals() 方法来比较 String 对象,并且一些文档会更快地引用它。不是吗?

https://dzone.com/articles/string-interning-what-why-and

标签: javastring

解决方案


TL;DR不要==用来比较字符串。

特别是关于字符串,是的,==equals,因为该String.equals方法所做的第一件事是...==比较以查看字符串是否与自身进行比较。如果是,equals()则由于方法调用的成本而变慢。如果不是,equals则速度会慢于该成本加上比较字符串中字符的成本。

请记住,在您可以使用==比较字符串之前(这是一个 Bad Idea™),您必须确定两个字符串都已被保留。intern()和的组合==并不比equals()intern()是一个相对昂贵的操作,因为它涉及在实习生池中寻找一个等效的字符串,这可能涉及大量的equals()调用(或它们的等价物)。

可能存在一些极其罕见的极端情况,在这些情况下,产生该intern()成本然后==在您知道被实习的字符串上使用是合理的。例如,如果您有一大组静态字符串,您会非常频繁地相互比较。但这是一个非常不寻常的边缘情况。

底线:不要将字符串与==. 不要不必要地实习字符串。


推荐阅读