3

我通过 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 是不可能的?

4

5 回答 5

8

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

甚至 C 语言也支持这一点。

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


顺便说一句,转换为字符串的最简单方法是使用以下内容。

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

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

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

于 2013-10-06T08:26:02.120 回答
3
double a = 44; 
String b = String.valueOf(a);
于 2013-10-06T08:25:55.943 回答
2

@Samiey Mehdi:我会告诉你当 U 类型从一种格式转换为另一种格式时会发生什么..

例子

双a = 2.5; // 考虑一下

第 1 步:第一台机器将此数字转换为二进制格式 .. double a =(0000 0000 0010.0101);

第2步:当您的类型将其转换为int ..首先它将删除小数..让二进制变为(0000 0000 0010)

第 3 步:它会在完全落入 int 范围后将其截断为 32 位,然后打印该值。int range(-2,147,483,648 到 2,147,483,647) 现在将打印注意:如果非小数的值大于类型转换的范围,它将丢失数据或数字(缩小它)并打印剩余的值

但是在字符串格式的情况下..第二步失败..它无法将二进制数字的值转换为字符串范围[bcos字符串没有任何范围]。所以它会打印不兼容的类型[编译时错误].......

于 2013-10-06T08:47:50.967 回答
2

double并且int都是数字类型,因此可以通过强制转换来转换它们。

String不是数字类型。

于 2013-10-06T08:21:52.993 回答
2

根据Java规范,需要先转换原始类型:

任何类型都可以通过字符串转换转换为String类型。

原始类型 T 的值 x 首先被转换为引用值,就好像通过将其作为参数提供给适当的类实例创建表达式(第 15.9 节):

如果 T 是布尔值,则使用 new Boolean(x)。

如果 T 是 char,则使用 new Character(x)。

如果 T 是 byte、short 或 int,则使用 new Integer(x)。

如果 T 很长,则使用 new Long(x)。

如果 T 是浮点数,则使用 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中的字符串转换

于 2013-10-06T08:25:06.543 回答