为什么可以将double转换为int,但是不能将double转换为String?

时间:2013-10-06 08:19:20

标签: java casting

我通过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?

5 个答案:

答案 0 :(得分:8)

从一种原始类型转换为另一种原始类型是标准的,很好理解并在机器代码中得到支持。即Java只是为您提供了生成相应机器代码的语法。

即使是C语言也支持这一点。

转换为对象是不同的,因为它要求你调用一个库,即使C ++有运算符重载来支持这样的转换,它也不是这样的转换。 C和Java不支持这样的隐式转换。


BTW转换为String的最简单方法是使用以下内容。

primitive p = ...
String s = "" + p;

这不是很有效,因为它使用了StringBuilder,但创建一个String也没有效率,所以它不是那么糟糕,而不是非常好。顺便说一句,我有一些库可以在不创建对象的情况下将原语转换为文本。

但是,我使用它是因为它对开发人员更有效率,我等待分析器告诉我这不够好,在这种情况下我也不会使用String.valueOf()。

答案 1 :(得分:3)

double a = 44; 
String b = String.valueOf(a);

答案 2 :(得分:2)

doubleint都是数字类型,因此可以通过转换进行转换。

String不是数字类型。

答案 3 :(得分:2)

根据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

中的字符串转换

答案 4 :(得分:2)

@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字符串没有任何范围]。所以它会打印不兼容的类型[编译时错误] .................