编译环境
JDK1.8 IDEA 2020.1
自动类型转换
定义:把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。
数据范围从小到大如下图所示:
示例:int ⇒ double
double a = 5;
System.out.println(a);
运行结果:
自动类型转换有一个十分常用的类型转换,那就是char类型的数据转化为int型的数据,我们可以看看下列示例:
int lowerLetter1 = 'a';
int lowerLetter2 = 'z';
int largeLetter1 = 'A';
int largeLetter2 = 'Z';
int space = ' ';
int number0 = '0';
int number9 = '9';
System.out.println(space);
System.out.println(number0);
System.out.println(number9);
System.out.println(largeLetter1);
System.out.println(largeLetter2);
System.out.println(lowerLetter1);
System.out.println(lowerLetter2);
运行结果:
由运行结果可知,每个char型的字符都被自动转换成了int型的数值,那为什么会打印这些数字而不是1、2、3等等呢?很显然这之间的转换有一个规则的存在,那就是ASCII码表,当进行char型数据与int数据之间的类型转换时,就会通过表中的对照关系一一实现。常用的ASCII码对照有:
空格 ' ' ⇒ 32
数字0-9 ⇒ 48-57
大写字母A-Z ⇒ 65-90
小写字母a-z ⇒ 97-122
强制类型转换
定义:把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量。
格式:目标数据类型 变量名 = (目标数据类型)值或者变量;
范例:
int b = (int)66.66; // 将double型强转为int型
float c = (float)1.2345678000001; // 将double型强转为float型
System.out.println(b);
System.out.println(c);
运行结果:
由上述可知,double类型的66.66强转为int型的数据时, 小数位的0.66被舍弃了;同理,float最多只能显示8位数,故数字8之后的000001也被舍弃了。这里可以看到,无论是那种转换,都导致了数据的丢失,所以强制类型转换一般是不推荐使用。但如果利用他的一些规定,也可能有很好的效果。
下面看一个示例:
// 商场消费,满100元获得3积分,问一位顾客消费了899.5元能够获得多少积分
double cost = 899.5;
int score = 0;
// 计算积分
score = (int)(cost/100);
System.out.println("顾客获得积分:" + score);
运行结果:
这样使用强制类型转换,我们反而利用了其丢失部分数据的特点,更加方便我们获得自己想要的数据。
char-int类型转换的一个常用方法
代码部分:
// 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
// 实例化一个Scanner对象input,注意导包(java.util.Scanner)
Scanner input = new Scanner(System.in);
// 初始化一个字符串变量用来接收输入的字符
System.out.print("请输入字符:");
String str = input.nextLine();
// 将字符串转换为字符数组
char[] charArr = str.toCharArray();
// 初始化字符种类的计数器
int letter = 0; // 字母
int num = 0; // 数字
int space = 0; // 空格
int others = 0; // 其他字符
// 遍历字符数组charArr,判断字符类型
for (char a :charArr) {
if (32 == a) { // 判断是否为空格
space++;
} else if (a>=48 && a<=57) { // 判断是否为数字
num++;
} else if ((a>=65 && a<=90) || (a>=97 && a<=122)) { // 判断是否为字母
letter++;
} else { // 其他字符
others++;
}
}
// 打印结果
System.out.println("数字的个数为:"+num);
System.out.println("字母的个数为:"+letter);
System.out.println("空格的个数为:"+space);
System.out.println("其他字符的个数为:"+others);
运行结果: