[英]why casting double to int is possible but casting double to String is not possible?
我通過String.valueOf()將其他類型轉換為String,如下所示:
String s = String.valueOf(2.5);
我也通過如下鑄造將double轉換為int:
int i = (int) 2.5 ;
我想將double轉換為String,如下所示:
String s = (String) 2.5;
但我給出以下錯誤:
Cannot cast from double to String
為什么可以將double轉換為int,但是不能將double轉換為String?
從一種原始類型轉換為另一種原始類型是標准的,很好理解並在機器代碼中得到支持。 即Java只是為您提供了生成相應機器代碼的語法。
甚至C語言也支持這一點。
轉換為對象是不同的,因為它要求您調用庫,即使C ++有運算符重載來支持這樣的轉換,它也不是這樣的轉換。 C和Java不支持這樣的隱式轉換。
BTW轉換為String的最簡單方法是使用以下方法。
primitive p = ...
String s = "" + p;
這是無效的,因為它使用StringBuilder,但是創建一個String也沒有效率,所以它只是沒有那么糟糕,而不是非常好。 順便說一下,我有庫可以在不創建對象的情況下將原語轉換為文本。
但是,我使用它是因為它對開發人員更有效,我等待分析器告訴我這不夠好在這種情況下我也不會使用String.valueOf()。
double a = 44;
String b = String.valueOf(a);
double
和int
都是數字類型,因此可以通過強制轉換它們。
String
不是數字類型。
根據Java規范,您需要首先轉換基本類型:
可以通過字符串轉換將任何類型轉換為String類型。
首先將基本類型T的值x轉換為引用值,就好像將它作為參數提供給適當的類實例創建表達式(第15.9節):
如果T是布爾值,則使用new Boolean(x)。
如果T是char,則使用new Character(x)。
如果T是byte,short或int,則使用new Integer(x)。
如果T很長,則使用新的Long(x)。
如果T是float,則使用new Float(x)。
如果T為double,則使用new Double(x)。
然后通過字符串轉換將此引用值轉換為String類型。
然后
(...)轉換的執行就好像通過調用沒有參數的引用對象的toString方法一樣; 但是如果調用toString方法的結果為null,則使用字符串“null”
見5.1.11。 http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html中的 字符串轉換
@Samiey Mehdi:我會告訴你當U Type Cast從一種格式到另一種格式時會發生什么。
例
雙a = 2.5; // 考慮一下
步驟1:第一台機器將此數字轉換為二進制格式.. double a =(0000 0000 0010.0101);
第2步:當你的類型將其轉換為int ..首先它將刪除小數..讓我們將二進制轉換為(0000 0000 0010)
第3步:它會在完全落入int范圍后將其截斷為32位,然后它將打印該值。 int范圍(-2,147,483,648到2,147,483,647)它將立即打印注意:如果非小數的值大於類型轉換的范圍,它將丟失數據或數字(縮小它)並打印剩余值
但在字符串格式的情況下..第二步失敗..它無法將二進制數字的值轉換為字符串范圍[bcos字符串沒有任何范圍]。 所以會打印不兼容的類型[編譯時錯誤] .................
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.