有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

爪哇:什么更快?比较两个对象引用还是比较两个基本体?

那么说默认值equals(Object obj)的逻辑是什么呢

public boolean equals(Object obj){
  this == obj; 
}

或:

int a = 1;
int b = 2;
a == b;

可能是另一种类型和另一个值,我只是找不到任何文档说明每种类型的成本是多少

Adding a reason for this:

我在读this question,我在想,如果有一个优化,比如比较对象内部的值(比如int),然后比较它们而不是引用


共 (1) 个答案

  1. # 1 楼答案

    编写了一个小类(可以随意在您选择的编辑器中运行)

    public class HelloWorld {
    
        public static void main(String []args) {
            HelloWorld app = new HelloWorld();
    
            int n = 100000;
    
            long startTime = System.nanoTime();
            app.doEqualsNull(n);
            long endTime = System.nanoTime();
            System.out.println("doEqualsNull (ns): " + (endTime - startTime)) ; 
    
            startTime = System.nanoTime();
            app.doEqualsThis(n);
            endTime = System.nanoTime();
            System.out.println("doEqualsThis (ns): " + (endTime - startTime)) ;
    
            startTime = System.nanoTime();
            app.doEqualsSameInt(n);
            endTime = System.nanoTime();
            System.out.println("doEqualsSameInt (ns): " + (endTime - startTime)) ;
    
            startTime = System.nanoTime();
            app.doEqualsDifferentInt(n);
            endTime = System.nanoTime();
            System.out.println("doEqualsDifferentInt (ns): " + (endTime - startTime)) ;
        }
    
        public void doEqualsNull(int n) {
            for (int i = 0 ; i < n ; i++) {
                this.equals(null);
            }
        }
    
        public void doEqualsThis(int n) {
            for (int i = 0 ; i < n ; i++) {
                this.equals(this);
            }
        }
    
        public boolean equals(Object obj){
            return this == obj; 
        }
    
        public void doEqualsSameInt(int n) {
            for (int i = 0 ; i < n ; i++) {
                this.equalsInt(5);
            }
        }
    
        public void doEqualsDifferentInt(int n) {
            for (int i = 0 ; i < n ; i++) {
                this.equalsInt(50);
            }
        }
    
        public boolean equalsInt(int other){
            return 5 == other; 
        }
    }
    

    输出:

    doEqualsNull (ns): 3660106
    doEqualsThis (ns): 3237291
    doEqualsSameInt (ns): 2887368
    doEqualsDifferentInt (ns): 2992786
    

    整数相等似乎需要稍短的时间(差别真的很小),但我猜一些分支预测确实影响了我的超科学计算