Çünkü derleyici 10*3
, derleme zamanında 30 ile değiştirilir . Yani, etkili bir şekilde: short thirty = 10 * 3
derleme zamanında hesaplanır.
Değiştirmeyi deneyin ten
ve three
karşı final short
(onları derleme zamanı sabitleri yapma) ve ne olduğunu görün: P
Bayt kodunu kullanarak inceleyin javap -v
Her iki sürüm için ( 10*3
ve final short
) . Çok az fark olduğunu görebileceksiniz.
Tamam, işte farklı durumlar için bayt kodu farkı.
Dava 1 :
Java Kodu: main () {kısa s = 10 * 3; }
Bayt kodu:
stack=1, locals=2, args_size=1
0: bipush 30 // directly push 30 into "s"
2: istore_1
3: return
Durum -2:
public static void main(String arf[]) {
final short s1= 10;
final short s2 = 3;
short s = s1*s2;
}
Bayt kodu:
stack=1, locals=4, args_size=1
0: bipush 10
2: istore_1
3: iconst_3
4: istore_2
5: bipush 30 // AGAIN, push 30 directly into "s"
7: istore_3
8: return
Durum -3:
public static void main(String arf[]) throws Exception {
short s1= 10;
short s2 = 3;
int s = s1*s2;
}
Bayt kodu:
stack=2, locals=4, args_size=1
0: bipush 10 // push constant 10
2: istore_1
3: iconst_3 // use constant 3
4: istore_2
5: iload_1
6: iload_2
7: imul
8: istore_3
9: return
Yukarıdaki durumda 10
ve 3
yerel değişkenlerden alınır s1
ves2
short thirty = 10 * 3;
büyük ihtimalleshort thirty = 30;
geçerli bir ifade olan derleyici ile değiştirilir . (Yine de ilgili JLS bölümüne bakmam gerekir).