繁体   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