기본지식 :
equals 는 데이터 자체를 비교한다.
== 는 주소값을 비교한다.
즉 아래의 "hello" 같은 고정된 값을 연속적으로 비교했을때는 당연히 ==가 빠르다.
new String("hello") 으로 비교하면 의도치 않은 연산을 했을 것이다.
결론 :
==가 빠르다. 주소값 비교이므로 조심해서 사용하자.
출력값
Sample Count : 1000000
== is slow: 33077
equals is slow: 51856
same: 915067
Result : == is Win. 63.786254242517735 %
- public class CompareEqualsSpeed {
- private void compareSpeed(int count) {
- int countCompare = 0;
- int countEquals = 0;
- long start = 0;
- long end = 0;
- int same = 0;
- if (count < 0) {
- return;
- }
- for (int i = 0; i < count * 2;) {
- start = System.nanoTime();
- if ("Hello" == "Hello") {
- i++;
- }
- end = System.nanoTime();
- long compare = end - start;
- start = System.nanoTime();
- if ("Hello".equals("Hello")) {
- i++;
- }
- end = System.nanoTime();
- long equals = end - start;
- if (compare > equals) {
- countCompare++;
- } else if (equals > compare) {
- countEquals++;
- } else {
- same++;
- }
- }
- System.out.println("Sample Count : " + count);
- System.out.println("== is slow: " + countCompare);
- System.out.println("equals is slow: " + countEquals);
- System.out.println("same: " + same);
- String result = "Result : ";
- System.out.println((countCompare < countEquals)
- ? (result += "== is Win. " + (double) ((double) countCompare / (double) countEquals) * 100) + " %"
- : (result += "equals is Win" + (double) ((double) countEquals / (double) countCompare) * 100) + " %");
- }
- public static void main(String... args) {
- CompareEqualsSpeed main = new CompareEqualsSpeed();
- main.compareSpeed(1000000);
- }
- }
'java' 카테고리의 다른 글
Java MethodHandle Example (Java 1.7) (0) | 2014.10.07 |
---|---|
Java reflection example. (0) | 2014.10.07 |
Java 8 신기능 정리 - Stream (0) | 2014.07.02 |
Java 8 신기능 정리 - Default Method (0) | 2014.07.02 |
Java 8 신기능 정리 - Method Reference, Construct Reference (0) | 2014.07.02 |