这道题目把f变量的值赋给l时,为什么还要类型转换?

来源:4-4 编程练习

半岛王子

2021-01-02 11:46:31

             //定义一个长整型变量l,值为987654321
             long l = 987654321;
	     //定义一个整型变量i,赋值为l,并输出i的值
	    int i = (int)l;
	    System.out.println("i="+i);
	    //定义一个float类型变量f,将变量l的值赋值给f,并输出f的值
	    float f = (float)l;
	    System.out.println("f="+f);
	    //将float的值f,重新赋值给变量l,并输出l的值
	    l = (long)f;
	    System.out.println("l="+l);

课上不是说float转换成double是隐式类型转换吗,为什么题目中不用强制类型转换把f转换成long,就会报错。

写回答

2回答

好帮手慕小脸

2021-01-03

同学你好,

1、是的,float转换为double类型是隐式类型转换(即自动类型转换)

http://img.mukewang.com/climg/5ff15b26094bfcf414070743.jpg

2、为什么题目中不用强制类型转换把f转换成long,就会报错。

答:因为float转换为long类型属于强制类型转换,如上图。

祝学习愉快~

0

WittChen

2021-01-02

1、个人理解,float => double 是因为double范围比float大,  double 完全可以表示 float的数值,因此不需要强转

2、至于长整形float => long 小数可以表示整数的数值,整数无法表示小数的数值,因此小数到整数必须强转,整数到小数会有隐式转换,但根据表示的范围会存在精度丢失的问题。

我说的可能表示太准确,具体听老师的,建议看看以下章节

http://img.mukewang.com/climg/5feffb4209eafb0310560435.jpg



0

0 学习 · 16556 问题

查看课程