Re[2]: Что быстрее: j=++i или j=i++, если i,j - Integer
От: Sergey Astakhov Россия  
Дата: 16.03.09 21:12
Оценка:
Здравствуйте, rsn81, Вы писали:

R>Здравствуйте, Ildar Karimov, Вы писали:


IK>>и, главное, почему тот или иной вариант быстрее?

R>Практически: в Java на таких вшей спидометры не прицепишь.
R>Теоретически: каждая запись генерирует одинаковое количество инструкций.

Я проверил на простом примере:

public class Test
{
 Integer m1(Integer i)
 {
  Integer j = 0;

  j=++i;

  return j;
 }

 Integer m2(Integer i)
 {
  Integer j = 0;

  j=i++;

  return j;
 }
}


D:\>javac -J-showversion Test.java
java version "1.6.0_10"
Java(TM) SE Runtime Environment (build 1.6.0_10-b33)
Java HotSpot(TM) Client VM (build 11.0-b15, mixed mode, sharing)

D:\>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>")V
4: return

java.lang.Integer m1(java.lang.Integer);
Code:
0: iconst_0
1: invokestatic #2; //Method java/lang/Integer.valueOfI)Ljava/lang/Integer;
4: astore_2
5: aload_1
6: invokevirtual #3; //Method java/lang/Integer.intValue)I
9: iconst_1
10: iadd
11: invokestatic #2; //Method java/lang/Integer.valueOfI)Ljava/lang/Integer;
14: dup
15: astore_1
16: astore_2
17: aload_2
18: areturn

java.lang.Integer m2(java.lang.Integer);
Code:
0: iconst_0
1: invokestatic #2; //Method java/lang/Integer.valueOfI)Ljava/lang/Integer;
4: astore_2
5: aload_1
6: astore_3
7: aload_1
8: invokevirtual #3; //Method java/lang/Integer.intValue)I
11: iconst_1
12: iadd
13: invokestatic #2; //Method java/lang/Integer.valueOfI)Ljava/lang/Integer;
16: dup
17: astore_1
18: astore 4
20: aload_3
21: astore_2
22: aload_2
23: areturn
}


Правый хвост длиннее!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.