[英]Casting an int into a long
我有一個關於在java中從int轉換為long的問題。 為什么浮標沒有問題:
float f = (float)45.45;//compiles no issue.
float f = 45.45f; //compiles no issue.
但是對於長型,它似乎是一個問題:
long l = (long)12213213213;
//with L or l at the end it will work though.
long l = (long)12213213213L;
似乎一旦編譯器因超出范圍的問題而通知錯誤,它就會在那里阻塞而不檢查程序員可能已經計划的任何可能的轉換。
你對它有什么看法? 為什么有任何特殊原因?
提前致謝。
但是對於長型,它似乎是一個問題:
那是因為沒有L
的12213213213
是一個int
,並且不long
。 由於該值超出了int
的范圍,因此您會收到錯誤。
嘗試類似的東西: -
System.out.println(Integer.MAX_VALUE);
System.out.println(12213213213L);
你會明白的。
就float
的情況而言: -
float f = (float)45.45;
值45.45
是一個double
值,適合double
的大小。 因此,編譯器將沒有這一問題,然后它會執行一個cast
給float
。
似乎一旦編譯器因超出范圍的問題而通知錯誤,它就會在那里阻塞而不檢查程序員可能已經計划的任何可能的轉換。
究竟。 編譯器首先檢查一個有效值,這里是int
,然后才能通過強制轉換操作進一步移動。
所以,基本上在long
和int
情況下: -
long l = (long)12213213213;
你沒有得到錯誤,因為中cast
操作,而是因為你的numeric literal
是不能表示為int
。 因此,編譯器沒有獲得有效值,以執行強制轉換操作。
Java不會考慮您只對值進行的操作。 例如,如果您有一個太大的值,那么將它分配給double是沒關系的,則將long值首先檢查為有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.