广州番禺Python, Java小班周末班培训
第四期线下Java, Python小班周末班已经开课了,培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析, Java中高级工程师培训。授课详情请点击:http://chipscoco.com/?cate=6
5.6.1 理解数据类型转换
数据类型转换,顾名思义,是从一种数据类型转换为另一种数据类型。常说的“取整”,就暗含类型转换的意思,即,将浮点小数转换为整数。我们在日常生活中,也常于各类角色之间进行转换,在企业中是老板或职员,在家中是丈夫或妻子,对陌生人彬彬有礼,对相熟的人则暴露各种坏脾气,这也是一种类型转换。
承上,类型转换无时不存,无处不在。
5.6.2 显式类型转换
从字面意思来进行理解,显式类型转换,是显式地从一种数据类型转换为另一种数据类型。在Java中通过(DataType) 的语法来实现显式类型转换, DataType表示数据类型。Java中的显式类型转换只能用于相互兼容的数据类型。
代码实例-将小数取整:
// 据说单身狗荷包里永远会有11块1毛1分钱, 还经常舍不得花 double money = 11.11; int balance = (int) money;
代码讲解:
(1) 在代码实例中定义了一个浮点类型的变量money,然后通过(int)money的形式将浮点类型显式地转换为整型。
读者需注意,将范围大的数据类型向下转换为范围小的数据类型时,可能发生数据截断。请读者看以下代码实例:
public class HelloJava { public static void main(String[] args) { long balance = 1314156; /* (1) byte类型只有一个字节大小,能保存的最大值为127 (2) balance的值远大于127,将其赋值给变量money时,发生了数据截断 */ byte money = (byte)balance; // 程序输出的值为108,108实质是1314156与256求余后的余数 System.out.println(money); } }
我们在开发程序的过程中,应审慎地处理数据类型的向下转换,不然程序会出现意想不到的bug。
代码实例-将整数变浮点数:
// 只要你能攒齐1314颗龙珠,就能觅得真爱,太难了 int true_love = 1314; // 真爱容不得一丝瑕疵? double flawed_love = (double) true_love;
代码讲解:
(1) 在代码实例中定义了一个整型变量true_love,然后通过(double)true_love的形式将整型值显式地转换为浮点值。
布尔类型不与整型,浮点型,字符类型兼容,在使用布尔值来转换为其它类型,或将其它类型转换为布尔类型时会报错:
public class HelloJava { public static void main(String[] args) { int money = 0; boolean is_happy = (boolean) money; } }
在IDEA中执行以上程序时,会报出类型不兼容的错误提示。
5.6.3 隐式类型转换
在使用Java中的基本数据类型进行运算时,范围小的数据类型会自动提升为范围大的数据类型。整型的范围按从小到大排序为:
char(1个字节) | byte(1个字节) | short(2个字节) | int(4个字节) | long(8个字节) |
char类型实质是一个字节的整型,用来保存字符编码,在程序中输出整型char值时,实质输出的时该字符编码所对应的字符。
代码实例-为char类型赋整型值并输出:
public class HelloJava { public static void main(String[] args) { // 可直接将字符的编码赋值给char类型,字符a的十进制编码是97 char ch = 97; // 输出变量ch的值时,输出的为字符a System.out.println(ch); } }
代码讲解:
(1) 将整型值赋值给字符型变量,Java会将整型值解释为字符的编码
(2) 读者可在网上查找ASCII编码,在该码表中可查询字符a以及其它ascii字符的编码
浮点型按从小到大排序为:
float(4个字节) | double(8个字节) |
现在来看一个简单的隐式类型转换例子:
public class HelloJava { public static void main(String[] args) { byte money = 10; // java会自动将money保存的整型值10提升为长整型,然后赋值给变量balance long balance = money; System.out.println("balance:"+balance); } }
5.6.4 课后习题
(1) 以生活中的例子来谈谈你对数据类型转换的理解
(2) 编写一个简单的程序,将长整型显式转换为字符类型。在实际开发中,这种大范围向小范围的类型转换会出现什么样的问题?
(3) 以下代码会发生隐式类型转换吗?简述你的理由。
int money = 0; float balance = money;