Java是一门强语法类型语言,其中大概率会设置到不同数据类型的变量之间进行数据类型转换。关于数据类型转换,大概有一下两种方式:
一:强制类型转换
什么是隐式类型数据转换呢?就是大的数据类型被强制转换为小的数据类型。
我们能不使用强制转换,尽量不使用强制转换,转不好可能会出问题。
下面我们使用代码来举一个小例子:
/** * **@name** 主方法 * **@param** args */ **public** **static** **void** main(String[] args) { **int** a = 130; **byte** b = (**byte**)a; System.***out***.println(b); // 输出-126 }
上边的代码最终输出-126。至于为什么输出的是-126,这个涉及到计算机底层的使用补码、反码、原码计算的知识,我这里不是很了解,后面再说。
二:隐式类型转换
什么是隐式类型数据转换呢?就是小的数据类型会自动提升为大的数据类型。
下面我们使用代码来举一个小例子:
/** * **@name** 主方法 * **@param** args */ **public** **static** **void** main(String[] args) { **byte** b = 1; **int** num = 1000; **short** s = 20; **long** l = 2L; // 浮点数定义 数字后边必须加f,否则报错 **float** f = 3.1f; **double** d = 3; **double** result = b + num + s + l + f + d; System.***out***.println(result); }
我们可以看到,上边的算式中我们最后接受结果的变量的数据类型是double,上边其他类型,比如byte、short等都自动隐式转换成了double类型的数据。
三:关于类型转换常见的问题
1:下面的代码打印的结果是几?
/** * @name 主方法 * @param args */ public static void main(String[] args) { byte a = 10; byte b = 20; byte c = a + b; System.out.println(c); }
第一次看到这个问题,我基本上没怎么想就回答30,但是将代码复制到eclipse中发现byte c = a + b;这一行报错。
后来一寻思,也对,我怎么知道两个byte类型的变量相加的值还是不是byte类型,报个错也是应该的。
解决方式很简单,我们将变量c的数据类型改成int即可。当然,使用强制类型转换也可以,但是不推荐。
2:下面的代码输出的结果是多少?
/** * @name 主方法 * @param args */ public static void main(String[] args) { byte b = 126 + 1; System.out.println(b); // 127 }
这个就比较容易了,单纯的两个常量计算而已。
四:char类型变量的数据运算
在做这个之前,我们先来了解一下,什么是ASCII码。
ASCII码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。
ASCII对照表:
下边我们在代码中测试一下:
/** * @name 主方法 * @param args */ public static void main(String[] args) { int b = 'a' + 1; System.out.println(b); // 输出98 }
上边的代码最终输出结果是98。这里没有什么难度,知道能这么用就可以了。
最后,有一点需要特别注意,boolean不能与其他数据类型进行转换。
有好的建议,请在下方输入你的评论。