代码之家  ›  专栏  ›  技术社区  ›  Rishi Prakash

Is==检查速度比Java中的equals()慢?

  •  -1
  • Rishi Prakash  · 技术社区  · 7 年前

    我只是想知道是不是

    1. if(int_value == int_value)

    2. if(int_value.equals(int_value))

    在java中,哪个计算速度更快?

    昨天,当我使用==时,我的一个编码解决方案显示“时间超过”,当我切换到equals时工作。所以是的,当你在代码中使用一百万次平等检查时,这很重要。

    4 回复  |  直到 7 年前
        1
  •  4
  •   davidxxx    7 年前

    Is==检查速度比Java中的equals()慢?

    比较两个对象引用在大多数情况下更快,但以这种方式比较对象并不总是有意义的。

    1) 当你比较两个 int == 应优先考虑运营商:

    int i = ...;
    if(i == 1){
    


    2) 当你比较两个 Integer (对象) equals()

    Integer i =  ...
    Integer j =  ...   
    if(i.equals(j)){
    

    你不必使用 == 将比较对象的身份,它可以在某些范围内工作,但不能在所有范围内工作,这还取决于如何工作 整数 实例化了个。
    == 在这种情况下。

    整数 带有 整数 这个 等于()

    Integer i = ...
    if(i.equals(1)){
    

    工作正常,但在装箱时应避免 int 1 Integer 1 调用之前 .
    等于() intValue() 在过去 整数 . 简而言之,它执行可以避免的检查和计算。

    有两种方法可以处理这种性能相似的比较情况:

    • 使用

      Integer i = ... if (a==1){

      它解除了 整数 整数 整数 具有的值 ==

    • 使用 intValue() s与 ==

      Integer i = if(i.intValue() == 1)){

    通常,JVM从 整数 整数 intValue() .

        2
  •  4
  •   Michael    7 年前

    以下内容无效:

    int i;
    int j;
    
    if (i.equals(j))
    

    equals .

    boxed primitives 这些类封装了原语并提供了可以调用的方法。对于 int box类是 Integer 。使用这些类总是比使用原始版本慢,但有时不可避免。创建对象和进行方法调用的开销很小。原始值不受此影响。

    基本上,除非有令人信服的理由,否则使用原语。


    如果涉及的类型是 :

    Integer i;
    Integer j;
    
    if (i.equals(j))
    

    那么你确实有一个 方法然而,你(实际上)别无选择,只能打电话 等于 进行比较是因为 == How to properly compare two Integers in Java? 约翰·斯基特的回答谈到了比较两者的最有效方法 整数

        3
  •  1
  •   Mritunjay    7 年前

    反过来说。当你与 == equals 它至少有函数调用的成本。

    对于具有一系列字段的自定义对象,如果实现了 等于 它在内部检查其他字段是否相等。

        4
  •  0
  •   Miguel M    7 年前

    你做不到。int类型的等于: error: int cannot be dereferenced