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

  • aki6336

    aki6336

    14 AĞUSTOS 2008
  • amc

    amc

    21 EYLÜL 2005
  • David Tedeyev

    David Tedeye

    20 AĞUSTOS 2011