54-61强制类型转换/基本数据类型转String类型/String类型转基本数据类型/练习
一、基本数据类型转换-强制类型转换
强制类型转换是程序员的有意行为,强制类型转换是自动类型转换的逆过程,
将容量大的数据类型转换成容量小的数据类型。使用的时候需要加上强制转换符号(),
但是强制类型转换很可能造成精度降低或者是溢出,需要格外注意。
force 强制 convert转换
// 演示强制类型转换
int n1 = (int)1.9; // 不会四舍五入,直接将1.9转换成为1,因为默认是一个double->int
// 造成了精度损失
// 强制类型转换也会造成溢出的现象
int n2 = 2000;
byte b1 = (byte)n2; // -48
强制类型转换的细节:
1、当进行数据的大小从大到小的时候就需要使用强制类型转换
2、强制类型转换符号只针对于最近的操作数有效,往往会使用小括号提升优先级。
int x = (int)103.5+61.5; // 这个针对的是10进行类型转换
int y = (int)(103.5+61.5); // 针对的是后面一整个表达式
3、char类型可以保存int的常量值,但是不能保存int的变量值,需要强制转换,int->char
char c1 = 100; // 因为100在char的范围类,不以int类型作为处理
int m = 100; // int -> int
char c2 = m; // 错误,因为m的100已经是四个字节的100了塞不进2个字节的char
char c3 = (char)m; // 将m的四个字节的100切成2个字节的char放到char中可以
System.out.println(c3); // 输出100对应的字符d
4、byte和short类型在进行运算的时候当作int类型处理。
前面讲过这个细节,byte,short,char在进行运算的时候当作int进行处理。
Java类型转换练习:
判断是否能通过编译:
1、short s = 12; // 12在short范围内,可以赋值
s = s - 9; // 你可能以为是正确的,但是这是不正确的,因为byte
// short char在进行运算的时候会当作int来进行处理,所以结果是一个int->short不行
2、byte b = 10; // 10在byte范围内,是可以int->byte的
b = b + 11; // 错误,因为byte,short,char参与运算的时候当作int来进行处理int -> byte
b = (byte)(b+11); // 将int结果切短成byte,并且不会造成精度损失,因为在byte范围内
3、char c = 'a'; // ok,将字符类型赋值给char可以
int i = 16; // ok,将int赋值给int可以
float d = .314F; // 前面的0可以省略,使用F作为后缀表示是一个float类型,float->float可以
double result = c + i + d; // ok,最后的结果是最大的类型,而最大的类型是float,结果是float->double
4、byte b = 16; // ok 因为16在byte范围内
short s = 14; // ok 因为14在short范围内
short t = s + b; // 错误,因为byte,short,char运算的结果是int,int->short不行
二、基本数据类型和String数据类型的转换
在程序开发中,我们经常需要将基本数据类型转换成String类型,或者将String类型转换成基本数据类型。
1、基本数据类型转换成String类型
这个非常简单,直接使用加号即可。
加上一个字符串就能够将基本数据类型转换成字符串
int n1 = 100;
float f1 = 1.1F;
double d1 = 4.5;
boolean b1 = true;
String s1 = n1 + " ";
String s2 = f1 + " ";
String s3 = d1 + " ";
String s4 = b1 + " ";
System.out.println(s1 + " " + s2 + " " + s3 + " " + s4);
2、将String类型转换成基本数据类型
需要使用到包装类,调用这个类下面的parse方法才能够成功
String -> 对应的基本数据类型
String s5 = "123";
// 会在OOP的时候讲解对象和方法时候讲到包装类
// 使用基本数据类型对应的包装类,的相应方法,得到基本数据类型
int num1 = Integer.parseInt(s5);
double num2 = Double.parseDouble(s5);
float num3 - Float.parseFloat(s5);
long num4 = Long.parseLong(s5);
byte num5 = Byte.parseByte(s5);
boolean b = Boolean.parseBoolean("true");
short num6 = Short.parseShort(s5);
// 想要将字符串转换成字符,只需要取出字符串中的一个个字符即可。
// 比如获得字符串的第一个字符
System.out.println(s5.charAt(0)); // 注意从零开始
基本数据类型和String类型的转换细节
1、将String类型转换成基本数据类型时,要确保String类型能够转换成有效的数据,比如,我们将123这个字符串,转换成为一个整数。带式不能把hello转换成为一个整数。
2、如果格式不正确,就会抛出异常,程序就会终止,这个问题在异常处理章节中,会讲。
三、本章练习题
// 第一题
public class Homework01 {
public static void main(String[] args) {
int n1;
n1 = 13;
int n2;
n2 = 17;
int n3;
n3 = n1 + n2; // n1和n2都是int类型,结果也是int类型int -> int
System.out.println("n3=" + n3); // n3 = 30
int n4 = 38;
int n5 = n4 - n3; // 8
System.out.println("n5 = " + n5);
}
}
// 第二题 使用char类型,分别保存\n \t \r \\ 1 2 3 等字符,并打印输出
// Homework02.java
public class Homework02 {
public static void main(String[] args) {
char c1 = '\n';
char c2 = '\t';
char c3 = '\r';
char c4 = '\\';
char c5 = '1';
char c6 = '2';
char c7 = '3';
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);
System.out.println(c5);
System.out.println(c6);
System.out.println(c7);
}
}
// 第三题,保存两本书名,使用加号拼接,看看效果,保存两个性别,使用加号拼接,查看效果。
// 保存两本书价格,使用加号拼接,看看效果
public class Homework03 {
public static void main(String[] args) {
String BookName01 = "红楼梦";
String BookName02 = "西游记";
System.out.println(BookName01 + BookName02);
char gender01 = '男';
char gender02 = '女';
System.out.println(gender01 + gender02); // 注意运算的结果是数字
// 因为byte,short,char参与运算结果就是一个int
double price01 = 3.33;
double price02 = 4.235;
System.out.println(price01 + price02);
}
}
// 第四题,
// 姓名 年龄 成绩 性别 爱好
// xx xx xx xx xx
public class Homework04 {
public static void main(String[] args) {
// System.out.println("姓名\t年龄\t成绩\t性别\t爱好\n小白\t18\t100\t男\t打篮球");
String name = "alice";
byte age = 19;
float score = 85.6F;
char gender = '女';
String hobby = "打羽毛球";
System.out.println("姓名\t年龄\t成绩\t性别\t爱好\n" +
name + '\t'+ age + '\t' + score + '\t' + gender + '\t' + hobby);
// 注意加号后面断行是允许的,因为这里是String类型进行加号运算会
// 将其他类型拼接成字符串
// 所以使用''单引号的\t是没有问题的
}
}

浙公网安备 33010602011771号