[英]casting between short,int,long,double,float in Java
據我了解,當您使用Java中的算術運算(例如double + int)在這些類型中的2個之間進行轉換時,結果將為更大的類型(在此示例中,結果將為double)。 當您對兩種大小相同的類型進行算術運算時會發生什么? int + float和long + double將得到什么? 因為int和float是4個字節,而long和double是8個字節。
這全部由JLS中的二進制數字升級規則指定。 從http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.6.2 :
當運算符將二進制數字提升應用於一對操作數時,每個操作數必須表示一個可轉換為數字類型的值,以下規則適用:
如果任何操作數是引用類型,則將其進行拆箱轉換(第5.1.8節)。
擴展原語轉換(第5.1.2節)適用於轉換以下規則指定的一個或兩個操作數:
如果一個操作數的類型為double,則另一個將轉換為double。
否則,如果其中一個操作數的類型為float,則另一個將轉換為float。
否則,如果其中一個操作數的類型為long,則另一個將轉換為long。
否則,兩個操作數都將轉換為int類型。
類型轉換后,如果有的話,將值集轉換(第5.1.13節)應用於每個操作數。
二進制數值提升是對某些運算符的操作數執行的:
乘法運算符*,/和%(第15.17節)
數值類型+和-的加法和減法運算符(第15.18.2節)
數值比較運算符<,<=,>和> =(§15.20.1)
數值相等運算符==和!=(§15.21.1)
整數按位運算符&,^和| (第15.22.1節)
在某些情況下,條件運算符? :(§15.25)
(“值集轉換”是關於浮點表示形式之間的映射。)
int
+ float
將為您提供float
(請注意,由於默認情況下使用double
因此您必須將結果強制轉換為float
)。 long
+ double
將使您double
。
仍將返回可以容納整個值的"bigger"
類型。 在您的特定問題
如果您在int和float之間輸入+,則返回值為float,而long + double返回double,
關於類型轉換,有兩個有趣的常見問題解答,可以在以下網址找到: http : //www.programmersheaven.com/2/FAQ-JAVA-Type-Conversion-Casting
http://myhowto.org/java/60-understanding-the-primitive-numeric-type-conversions-in-java/
在回答相同大小的兩種類型的問題時,返回值是精度最高的類型。
嘗試以下代碼:
public static void main(String[] args) {
int i=1;
float f=2.5f;
long l=10;
double d=3.74;
System.out.println(i+f);
System.out.println(f+i);
System.out.println(l+d);
System.out.println(d+l);
}
您將看到結果為3.5和13.74,分別是浮點數和雙精度數(在Netbeans 6.9和Java 1.6中進行了測試)。
這種“促銷”的陷阱是long
+ float
將“擴大”為使用浮點數。
例如
System.out.println(1111111111111111111L + 0.0f);
System.out.println(1111111111111111111L + 0.0);
版畫
1.11111113E18
1.11111111111111117E18
在處理long和float時,您可能不會得到更寬的類型,並且可能會失去比預期更高的精度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.