Java Integer.equals()和Objects.equals()的比较
以下是我对两种方法的测试:Java Integer.equals()和Objects.equals()的比较,java,testing,equals,Java,Testing,Equals,以下是我对两种方法的测试: Random generator = new Random(); long startTime = System.nanoTime(); for(int i = 0; i<1000; i++) { Integer int11 = generator.nextInt(1000); Integer int22 = generator.nextInt(1000); int11.equals(int
Random generator = new Random();
long startTime = System.nanoTime();
for(int i = 0; i<1000; i++) {
Integer int11 = generator.nextInt(1000);
Integer int22 = generator.nextInt(1000);
int11.equals(int22);
}
long endTime = System.nanoTime();
long duration = (endTime - startTime);
System.out.println(duration + " ns");
Random generator1 = new Random();
long startTime1 = System.nanoTime();
for(int i = 0; i<1000; i++) {
Integer int1 = generator1.nextInt(1000);
Integer int2 = generator1.nextInt(1000);
Objects.equals(int1, int2);
}
long endTime1 = System.nanoTime();
long duration1 = (endTime1 - startTime1);
System.out.println(duration1 + " ns");
当我替换这两种方法时:
Random generator1 = new Random();
long startTime1 = System.nanoTime();
for(int i = 0; i<1000; i++) {
Integer int1 = generator1.nextInt(1000);
Integer int2 = generator1.nextInt(1000);
Objects.equals(int1, int2);
}
long endTime1 = System.nanoTime();
long duration1 = (endTime1 - startTime1);
System.out.println(duration1 + " ns");
Random generator = new Random();
long startTime = System.nanoTime();
for(int i = 0; i<1000; i++) {
Integer int11 = generator.nextInt(1000);
Integer int22 = generator.nextInt(1000);
int11.equals(int22);
}
long endTime = System.nanoTime();
long duration = (endTime - startTime);
System.out.println(duration + " ns");
所以,我的问题是:为什么在这两种情况下,第二个“测试”的执行速度都比第一个快得多?它依赖于什么?因为JIT启动并检测到
随机。nextInt()
和equals()
是经常调用的两种方法,因此优化它们非常有用
一旦字节码被优化并转换为本机代码,它的执行速度就会更快
请注意,您所测量的可能比equals()更随机
由于JIT进行的运行时优化,以及垃圾收集,在Java中很难正确执行正确的微基准测试。如果您想认真对待它,请使用JMH。,因为JIT会启动,并检测到
Random.nextInt()
和equals()
是经常调用的两种方法,因此优化它们非常有用
一旦字节码被优化并转换为本机代码,它的执行速度就会更快
请注意,您所测量的可能比equals()更随机
由于JIT进行的运行时优化,以及垃圾收集,在Java中很难正确执行正确的微基准测试。如果您想认真对待它,请使用JMH
Random generator1 = new Random();
long startTime1 = System.nanoTime();
for(int i = 0; i<1000; i++) {
Integer int1 = generator1.nextInt(1000);
Integer int2 = generator1.nextInt(1000);
Objects.equals(int1, int2);
}
long endTime1 = System.nanoTime();
long duration1 = (endTime1 - startTime1);
System.out.println(duration1 + " ns");
Random generator = new Random();
long startTime = System.nanoTime();
for(int i = 0; i<1000; i++) {
Integer int11 = generator.nextInt(1000);
Integer int22 = generator.nextInt(1000);
int11.equals(int22);
}
long endTime = System.nanoTime();
long duration = (endTime - startTime);
System.out.println(duration + " ns");
1026871 ns
614074 ns