SORU
25 AĞUSTOS 2015, Salı


Neden &; kısa otuz = 3 * 10" yasal bir görev"?

Eğer short otomatik olarak aritmetik işlemler int terfi, neden sonra:

short thirty = 10 * 3;

short değişken için yasal bir atama thirty?

Buna karşılık, bu:

short ten = 10;
short three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED

yanı sıra bu:

int ten = 10;
int three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED

short int bir değer atanması nedeniyle derleme değil beklendiği gibi döküm olmadan izin verilmez.

Özel bir şey sayısal rakamları hakkında bir gelişme var mı?

CEVAP
25 AĞUSTOS 2015, Salı


Derleyici 30 10*3 değiştirdiğindenderleme zamanıkendisi. Yani,etkili bir şekilde : short thirty = 10 * 3 derleme zamanında hesaplanır.

final short ten three (zaman sabitler derleme yapmak) değiştirmeyi deneyin ve neler olacağını görün :P

Bayt-kodu hem verisions javap -v (10*3 final short) inceleyin. Küçük bir fark olduğunu görmek mümkün olacak.

Tamam, Yani burada farklı durumlar için bayt kodu farktır.

Case -1 :

Java Kod : () main { = 10*3 Kısa s; }

Bayt kodu :

stack=1, locals=2, args_size=1
         0: bipush        30  // directly push 30 into "s"
         2: istore_1      
         3: return   

Case -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   

Olgu -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 3 yerel değişkenler s1 s2 alınır

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GOTO Conferences

    GOTO Confere

    3 EKİM 2011
  • MaximumPCMag

    MaximumPCMag

    23 Temmuz 2010
  • rekjavicxxx

    rekjavicxxx

    28 EKİM 2007