问题描述
- 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的?
解决方案
String的加法有重载,遇到别的类型,会调用toString。没那么复杂。
解决方案二:
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);}
本人已测试通过!!!
解决方案三:
首先double是基本数据类型,是没有什么toString方法的,代码中的类型转换并没有调用任何方法,出现此种结果是由字符串的特性和编译器的优化决定的。可以反编译对应的class文件,发现在程序执行之前str的值就已经固定了,为18+2。因为mnstr会被编译器解释成final类型的,所以程序执行前值就知道了,此种计算编译器完全可以完成,虚拟机不必浪费资源进行计算。
解决方案四:
上面的回答中编译后的文件内容有误,抱歉。现更正如下:
首先double是基本数据类型,是没有什么toString方法的,出现此种结果是由字符串的特性决定的。在Java中字符串支持“+”运算符,该运算符对字符串的运行结果是将所有的内容以字面值的形式拼接起来,所以会出现18.0+2.0的结果。18.0和2.0是编译器处理后的n与m的值。
看一下反编译的内容:
红色圈起来的地方说明在代码中调用了StringBuilder类的append()方法和toString()方法。
对于原先的错误回答,请各位见谅。
解决方案五:
和编译器有关!本人猜测,首先编译器new n m两个double对象,然后new str时将double转为string,然后编译器处理为stringbuilder连接
解决方案六:
java 所有数据都是类对象
double 有 tosting 方法
所以 每个内部类型 都可以自动转换成字符串只要需要
哪怕是常数也可以
解决方案七:
java 所有数据都是类对象
double 有 tosting 方法
所以 每个内部类型 都可以自动转换成字符串只要需要
哪怕是常数也可以
解决方案八:
我觉得是先将double类型自动装箱为Double类型,然后调用Double类型的toString方法。
解决方案九:
tostring方法
解决方案十:
java 所有数据都是类对象
double 有 tosting 方法
所以 每个内部类型 都可以自动转换成字符串只要需要
哪怕是常数也可以