解释是整数默认为int 所以long中数值大于int时需要转化
而小数默认是double,float的取值范围小于double为什么还要加上f进行数据类型转换? 默认为double就够用了 为什么必须要强制数据类型转换呢?我不李姐....
这两个例子太矛盾了,一个是小变大,一个是大变小,但是这两个却都需要强制数据类型转换,不合理啊
然后网上有的会说double变成float需要强制数据类型转换是因为double转为float可能会有精度损失,所以要强制数据类型转换,这个我是赞同的,那么同理,为什么int转为long需要加l呢?有的人说是自动转的,但是我在cmd上编译会报错,比如说定义一个long a=1000000000000000000 很明显会报错 说数值太大了。
话又说回来,我都在前面声明数据类型了,为什么还要默认定义为整数是int,浮点数是double,那我前面的声明有卵用啊?
又思考了一会儿,理清了逻辑:long中输入100000000000000 会编译错误 需要在后面加上l(这里有一个疑问,如果输入数值小于int的范围 此时就不会报错,那此时的数据类型是int还是long?我把它当作是int 接着讨论) 这时是因为默认为int 所以需要转化为long。而float则需要加f,但是浮点数默认是double,取值范围大于float,按理说float能显示的数字,double就更能显示,所以如果是因为数据范围 double需要转为float是没有必要的,而网上的解释是因为double转为float会有精度流失,所以要加上f告诉计算机你知道有精度流失,但是默认的就是double 就算你前面写的是float 它还是用double储存的,直接输入double类型的就没有精度损失(因为就算你前面加上了float,计算机还是默认为double,所以这时候输出double根本没有一点损失)所以这时候为什么会报错呢?计算机一边默认你整数为int 浮点数为double 不管你前面加没加上数据类型变量,但是另一边又考虑你前面的数据类型变量,比如你用float就会怕你精度损失,所以计算机到底是考虑不考虑前面的数据类型?