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是没有问题的
    }
}
posted @ 2025-04-20 16:24  请叫我虾  阅读(41)  评论(0)    收藏  举报