簡體   English   中英

在Java程序中單行進行多個類型轉換

[英]Multiple typecasting in a single line in Java program

在今天亂搞Java語法的同時,我嘗試編譯以下java代碼:

class Mess {
    public static void main(String[] args) {
        float i = (char)(int)(long)(byte) 100;
        System.out.println(i);
    }
}

代碼實際上沒有給出編譯或運行時錯誤。 i數據類型更改為任何其他數據類型(如intdoublechar也有效。 不僅如此,在聲明中引入操作也沒有任何錯誤:

float i = (char)+(int)-(long)(byte) 100;

當我在Netbeans中使用自動格式來格式化代碼時,上面的聲明格式如下:

float i = (char) +(int) -(long) (byte) 100;

請幫助我理解這段代碼是如何編譯的?

它基本上只是一系列演員和一元+-

float i = (char) +(int) -(long) (byte) 100;

它相當於

byte tmp1 = (byte) 100;
long tmp2 = (long) tmp1;
long tmp3 = -tmp2;
int  tmp4 = (int) tmp3;
int  tmp5 = +tmp4;
char tmp6 = tmp5;
float i = tmp6;

最后的賦值是從charfloat ,這是一個擴展的原始轉換。 請參閱JLS第5章:轉換和促銷

對原始類型的19個特定轉換稱為擴展原始轉換:

  • byte to short,int,long,float或double
  • 短,int,long,float或double
  • char到int,long, float或double
  • int到long,float或double
  • 長期浮動或加倍
  • 漂浮加倍

考慮一下這樣:

   float i = ((char) +((int) -((long) ((byte) 100))));

每個步驟都會將結果轉換為自己的類型。 所以,令人驚訝的是100因為所有這些中間類型演員而變成了65436.0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM