Java初学者:基本数据类型的强制类型转换
前文书我们讲到了基本的输入输出,今天我们再回到基本的数据类型那里,但是我们不会赘述之前的内容,我们今天讲一讲下强制类型转换。
首先我们需要明确一下概念,明确一下什么叫作强制类型转换,强制类型转换就是以强制的手段把一个数据类型的数据转换成其他数据类型的数据。
举个例子,假设我们有个整型数据9,我们要强制把它转换成浮点型数据,我们知道,如果不考虑取值范围的话,浮点型数据就是数学里面的小数,大家觉得转换以后会怎么样呢?这不难猜测,应该会变成9.0,事实也是如此。再比如,我们有个浮点型数据6.7,如果我们强制转换成整形数据呢?我们知道,如果不考虑取值范围的话,整型数据也就是数学里的整数,大家觉得转换以后会怎么样呢?按照我们的猜测,四舍五入,似乎应该等于7,但是事实上,java会给你6,而不是7(虽然也能得到7,但那是Math下的内建函数干的事情,不属于强制类型转换的范畴),也就是说,java只会给你浮点型数据的整数部分,而不会四舍五入。
前文书我们讲到了基本的输入输出,今天我们再回到基本的数据类型那里,但是我们不会赘述之前的内容,我们今天讲一讲基本数据类型的强制类型转换。
首先我们需要明确一下概念,明确一下什么叫作强制类型转换,强制类型转换就是以强制的手段把一个数据类型的数据转换成其他数据类型的数据。在基本数据类型的范畴,一般有两类强制类型转换,数值之间的强制类型转换,和数值与字符串之间的转换。
数值之间的转换,举个例子,假设我们有个整型数据9,我们要强制把它转换成浮点型数据,我们知道,如果不考虑取值范围的话,浮点型数据就是数学里面的小数,大家觉得转换以后会怎么样呢?这不难猜测,应该会变成9.0,事实也是如此。再比如,我们有个浮点型数据6.7,如果我们强制转换成整形数据呢?我们知道,如果不考虑取值范围的话,整型数据也就是数学里的整数,大家觉得转换以后会怎么样呢?按照我们的猜测,四舍五入,似乎应该等于7,但是事实上,java会给你6,而不是7(虽然也能得到7,但那是Math下的内建函数干的事情,不属于强制类型转换的范畴),也就是说,java只会给你浮点型数据的整数部分,而不会四舍五入。怎么转换呢?比较简单,比如你想把整型的9转换成浮点型,那么是这样的:(double)9,如果你想把浮点型6.7转换成整型,那么是这样的:(int)6.7,是不是很简单呢。
那么数值与字符串之间的转换呢?比如把字符串"4.5"转成浮点数4.5,或者反过来,把浮点型数字4.5转换成"4.5",这乍一听起来觉得没必要,而且,为什么我们非要弄个"4.5"这样的字符串呢?如果说要print出来的话,直接print浮点型数字,也是可以的啊。从目前所学到的知识来看,确实如此,但是,如果你要做读取文件的操作,而要对文件里的数字做数值处理,这就需要将表示数字的字符串转换成数字了,因为,java将读取的文件内容全都看做字符串,而不是数值。相对的,把浮点型数据转换成字符串,确实不怎么常用,但是在某些特定的纠结时候,还是不得不用。
那么,如何将表示数字的字符串转换为数字呢?这里需要用到Double或者Integer的内建函数,以浮点型为例,整型与其相似。比如我们要把"4.5"转换成4.5,那么是这样的
Double.valueOf("4.5"),或者Double.parseDouble("4.5")。 利用java的反射机制,我们使用 print语句System.out.println(Double.valueOf("4.5").getClass().getSimpleName()),如果运行的话,可以看到java会给出Double,证明我们确实得到了一个浮点型数据。
还有一种比较简单但是有投机取巧之嫌的方法就是,用一个空字符串加上一个数字,就会得到一个表示那个数字的字符串, 比如,同样的功能我们可以这么实现:"" + 4.5。这是利用了java的字符串的操作,我们以后会介绍到。
数值转换为字符串,虽然不常用,但是我们还是说一下吧,比如说,把4.5转换成"4.5",最最简单的方法是利用java的字符串操作,用一个空字符串加上一个数字,就会得到一个表示那个数字的字符串, 比如,我们可以这么实现:"" + 4.5, 就会得到一个"4.5",但是这有投机取巧之嫌。比较正式的方法其实是利用String的内建方法:String.valueOf(4.5),也许你会注意到,上面我们似乎也用到了valueOf方法,是的,不同的包里面,可能会有同名的内建函数,这没什么,但是他们的用法和意义可能会不同。不过,Double有parseDouble内建方法,但是String却并没有这个方法。
最后是布尔型,它只有两个值,true和false, 我至今没见过布尔型转换成其它类型,虽然String的内建函数valueOf的参数可以是布尔值,但我并不觉得布尔型转换成字符串有什么实际意义,也许是小编我比较没见识,希望大家指正。
好了,今天暂且说到这里,最后我们做个简单的程序来练习一下强制类型转换,在这个程序中,我们要求用户输入三个数字,一个是整型,一个是浮点型,一个是字符串,我们假设用户输入的都是数字或者表示数字的字符串,然后我们用强制类型转换,再打印出一些信息。此程序其实没什么实用性,只是说明一下问题罢了。如下:
好了,我们今天就说到这里,各位看官若是初学者,请与本菜鸟一同共勉。欲知后事如何,且听下回分解。