簡體   English   中英

為什么可以將double轉換為int,但是不能將double轉換為String?

[英]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);

doubleint都是數字類型,因此可以通過強制轉換它們。

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.

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