我通过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?
答案 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)
double
和int
都是数字类型,因此可以通过转换进行转换。
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字符串没有任何范围]。所以它会打印不兼容的类型[编译时错误] .................