기본지식 :
equals 는 데이터 자체를 비교한다.
== 는 주소값을 비교한다.

즉 아래의 "hello" 같은 고정된 값을 연속적으로 비교했을때는 당연히 ==가 빠르다.
new String("hello") 으로 비교하면 의도치 않은 연산을 했을 것이다. 


결론 : 
==가 빠르다. 주소값 비교이므로 조심해서 사용하자.



출력값
Sample Count : 1000000
== is slow: 33077
equals is slow: 51856
same: 915067
Result : == is Win. 63.786254242517735 %



  1. public class CompareEqualsSpeed {
  2.     private void compareSpeed(int count) {
  3.         int countCompare = 0;
  4.         int countEquals = 0;
  5.         long start = 0;
  6.         long end = 0;
  7.         int same = 0;
  8.         if (count < 0) {
  9.             return;
  10.         }
  11.         for (int i = 0; i < count * 2;) {
  12.  
  13.             start = System.nanoTime();
  14.             if ("Hello" == "Hello") {
  15.                 i++;
  16.             }
  17.             end = System.nanoTime();
  18.             long compare = end - start;
  19.  
  20.             start = System.nanoTime();
  21.             if ("Hello".equals("Hello")) {
  22.                 i++;
  23.             }
  24.             end = System.nanoTime();
  25.             long equals = end - start;
  26.  
  27.  
  28.             if (compare > equals) {
  29.                 countCompare++;
  30.             } else if (equals > compare) {
  31.                 countEquals++;
  32.             } else {
  33.                 same++;
  34.             }
  35.         }
  36.  
  37.         System.out.println("Sample Count : " + count);
  38.         System.out.println("== is slow: " + countCompare);
  39.         System.out.println("equals is slow: " + countEquals);
  40.         System.out.println("same: " + same);
  41.  
  42.         String result = "Result : ";
  43.         System.out.println((countCompare < countEquals)
  44.                 ? (result += "== is Win. " + (double) ((double) countCompare / (double) countEquals) * 100) + " %"
  45.                 : (result += "equals is Win" + (double) ((double) countEquals / (double) countCompare) * 100) + " %");
  46.     }
  47.  
  48.     public static void main(String... args) {
  49.         CompareEqualsSpeed main = new CompareEqualsSpeed();
  50.         main.compareSpeed(1000000);
  51.     }
  52. }




+ Recent posts