2 u013005316 u013005316 于 2016.04.22 11:53 提问

java里,double类型可以直接转换为String的机制有什么

package string;

public class Example1 {

public static void main(String[] args) {
    String str;     
    double n = 18;
    double m = 2;
    str = n + "+" + m;

    System.out.println(str);

}

}
在上述代码中,str是怎么把m和n转换为String的?

15个回答

caozhy
caozhy   Ds   Rxr 2016.04.22 14:38

String的加法有重载,遇到别的类型,会调用toString。没那么复杂。

lovebosom
lovebosom   2016.04.22 15:36

public static void main(String[] args) {
String str = "";

         double n = 18;
         double m = 2;
        //第一种方法,使用toString(),不能直接m.toString(),会报错,
        //可以把m 强转为Double后,再使用toString()
         System.out.println(((Double)m).toString()+“”+((Double)n).toString());

        //第二种方法是使用 String.valueOf(m),把m直接转为String, 
        //推荐这个方式。
         str = String.valueOf(n) +""+ String.valueOf(m);
            System.out.println(str);
}
 本人已测试通过!!!
Goskalrie
Goskalrie   2016.04.22 17:53

首先double是基本数据类型,是没有什么toString方法的,代码中的类型转换并没有调用任何方法,出现此种结果是由字符串的特性和编译器的优化决定的。可以反编译对应的class文件,发现在程序执行之前str的值就已经固定了,为18+2。因为m,n,str会被编译器解释成final类型的,所以程序执行前值就知道了,此种计算编译器完全可以完成,虚拟机不必浪费资源进行计算。

Goskalrie
Goskalrie   2016.04.22 19:21

上面的回答中编译后的文件内容有误,抱歉。现更正如下:
首先double是基本数据类型,是没有什么toString方法的,出现此种结果是由字符串的特性决定的。在Java中字符串支持“+”运算符,该运算符对字符串的运行结果是将所有的内容以字面值的形式拼接起来,所以会出现18.0+2.0的结果。18.0和2.0是编译器处理后的n与m的值。
看一下反编译的内容:
图片说明
红色圈起来的地方说明在代码中调用了StringBuilder类的append()方法和toString()方法。
对于原先的错误回答,请各位见谅。

oSanYeCao1234567
oSanYeCao1234567   Ds   Rxr 2016.09.15 19:35

流弊,都深入到编译器级别啦,学习啦

m_912311697
m_912311697   2016.04.22 12:10

和编译器有关!本人猜测,首先编译器new n m两个double对象,然后new str时将double转为string,然后编译器处理为stringbuilder连接

qq_26946497
qq_26946497 double 作为八种基本类型,一般不理解为"对象"
一年多之前 回复
lm_whales
lm_whales   Rxr 2016.04.22 12:48

java 所有数据都是类对象
double 有 tosting 方法
所以 每个内部类型 都可以自动转换成字符串只要需要
哪怕是常数也可以

lm_whales
lm_whales   Rxr 2016.04.22 12:47

java 所有数据都是类对象
double 有 tosting 方法
所以 每个内部类型 都可以自动转换成字符串只要需要
哪怕是常数也可以

theSnai1
theSnai1   2016.04.22 12:50

我觉得是先将double类型自动装箱为Double类型,然后调用Double类型的toString方法。

qq_26946497
qq_26946497 见下方代码
一年多之前 回复
a714530833
a714530833   2016.04.22 12:17

tostring方法

共15条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片