Java 基本数据类型变量间运算规则
在Java程序中,不同的基本数据类型(只有7种,不包含boolean类型)变量的值经常需要进行相互转换。转换的方式有两种:自动类型提升和强制类型转换。
自动类型提升
规则:将取值范围小(或容量小)的类型自动提升为取值范围大(或容量大)的类型 。
基本数据类型的转换规则如图所示:
规则1、当把存储范围小的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围大的变量时
int i = 'A';//插入自动转换为 int,其实就是把字符的编码值赋值给变量 i double d = 5; //int 自动转换为 double long nul = 123456; //nul的值放在 int 也是可以的 // byte bi = 130; //超过 byte 数据范围了 long bigNum = 545454545454545L;//数值已经超过int范围,需要加L显示声明 long 类型
规则2、当存储范围小的数据类型与存储范围大的数据类型变量一起混合运算时,会按照其中最大的类型运算
int n = 1; byte b = 4; double d1 = 2.1; double sum = n + b + d1;//混合运行,转换为 double 进行运算
规则3、当byte,short,char数据类型的变量进行算术运算时,按照int类型处理
byte b1 = 1; byte b2 = 3; //byte b3 = b1 + b2; //编译报错,b1 + b2 自动转换为 int char c1 = '0'; char c2 = 'E'; int c3 = c1 + c2; System.out.println(c3);//117
强制类型转换
将3.14 赋值到int 类型变量会发生什么?产生编译失败,肯定无法赋值。
int pi = 3.14;
想要赋值成功,只有通过强制类型转换,将double 类型强制转换成int 类型才能赋值。
规则:将取值范围大(或容量大)的类型强制转换成取值范围小(或容量小)的类型。
自动类型提升是Java自动执行的,而强制类型转换是自动类型提升的逆运算,需要我们自己手动执行。
转换格式:
数据类型1 变量名 = (数据类型1)被强转数据值; //()中的数据类型必须<=变量值的数据类型;
规则1、当把存储范围大的值(常量值、变量的值、表达式计算的结果值)强制转换为存储范围小的变量时,可能会损失精度或溢出。
int pi = (int) 3.14; //损失进度 double d2 = 4.2; int num = (int) d2;//损失精度 int ii = 200; byte b5 = (byte) ii ;//溢出 System.out.println(b5);//溢出
规则2、当某个值想要提升数据类型时,也可以使用强制类型转换。这种情况的强制类型转换是没有风险的,通常省略。
int i1 = 1; int j = 2; double bigger = (double)(i1/j); System.out.println(bigger);//0.0
规则3、声明long类型变量时,可以出现省略后缀的情况。float则不同。
long l1 = 123L; long l2 = 123;//如何理解呢? 此时可以看做是int类型的123自动类型提升为long类型 //long l3 = 123123123123; //报错,因为123123123123超出了int的范围。 long l4 = 123123123123L; //float f1 = 12.3; //报错,因为12.3看做是double,不能自动转换为float类型 float f2 = 12.3F; float f3 = (float) 12.3;
基本数据类型与String的运算
1、字符串类型:String
String不是基本数据类型,属于引用数据类型
使用一对""来表示一个字符串,内部可以包含0个、1个或多个字符。
声明方式与基本数据类型类似。例如:String name = “东方伯”;
2 运算规则
规则1、任意八种基本数据类型的数据与String类型只能进行连接“+”运算,且结果一定也是String类型
int num11 = 10; boolean b111 = true; String s1 = "abc"; String s2 = s1 + num + b1; System.out.println(s2);//abc10true //String s3 = num + b1 + s1;//编译不通过,因为int类型不能与boolean运算 String s4 = num + (b1 + s1);//编译通过
规则2、String类型不能通过强制类型()转换,转为其他的类型
String str = "123"; // int num22 = (int)str;//错误的 int num44 = Integer.parseInt(str);//正确的,后面才能讲到,借助包装类的方法才能转 System.out.println(num44);
测试1:公安局身份登记
要求填写自己的姓名、年龄、性别、体重、婚姻状况(已婚用true表示,单身用false表示)、联系方式等等。
String name = "依琳"; int age = 16; char gender = '女'; double weight = 46.5; boolean isMarried = false; String phone = "18510000000"; System.out.println("name = " + name + "\nage = " + age + "\ngender = " + gender + "\nweight = " + weight + "\nisMarried = " + isMarried + "\nphoneNumber = " + phone);
一些输出测试
// String str1 = 4; //判断对错: String str2 = 3.5f + ""; System.out.println(str2); //输出:3.5 System.out .println(3+4+"Hello!"); //输出:7Hello! System.out.println("Hello!"+3+4); //输出:Hello!34 System.out.println('a'+1+"Hello!"); //输出:98Hello! System.out.println("Hello"+'a'+1); //输出:Helloa1