3.类型转换
3.1 自动类型转换
程序会自动去识别数据类型并完成转换,不是所有的数据都能自动转换,只能从低字节向高字节转换,反之则不行。
(1)可以完成自动类型转换如下例所示:
public class Test {
public static void main(String[] args){
int num = 10;
double num2 = num;
System.out.println(num2);
}
}
运行结果如下:
10.0
(2)不可以完成自动类型转换如下例所示,代码会报错
public class Test {
public static void main(String[] args){
long i = 1;
int ii = i;
}
}
3.2 强制类型转换
如果程序无法完成自动类型转换,则需要进行强制类型转换,不推荐使用,有可能造成数据精度损失。【注意:只能是相同类型的才能进行强制转换(例如数字转数字,不能出现数字转字符)】
强制转换造成精度损失如下例所示:
public class Test {
public static void main(String[] args){
double num1 = 10.6;
int num2 = (int)num1;
System.out.println(num2);
}
}
结果如下图所示:
10
3.3 引用类型
自动类型转换规则是子类对象可以转换为父类对象,但是父类对象不能转换为子类对象。【父类对象转子类必须使用强制类型转换,如果两个类之间没有父子类继承关系,则无法进行数据类型转换】
(1)子类对象转换为父类对象需要强制转换:
public class Test {
public static void main(String[] args){
People people = new People();
Student student = (Student) people;
}
}
(2)父类对象转换为子类对象则会自动转换:
public class Test {
public static void main(String[] args){
Student student = new Student();
People people = student;
}
}
当取消两者的继承关系时,无论是强制类型转换还是自动类型转换都会失效,上述代码皆会报错。
3.4拆箱和装箱
它也属于类型转换,是引用类型和基本数据类型之间的转换。
4.运算符
4.1 逻辑运算符
只能用于boolean类型的数据,判断boolean数据之间的逻辑关系,包括与、或、非3种逻辑关系。
(1)与:&;(2)短路与:&&;(3)或:|;(4)短路或:||;(5)非:!。
4.1.1 运算结果
(1)A & B,只有当 A 和 B 都为 true 的时候结果为 true,否则为 false
(2)A | B,只要 A 或 B 有一个为 true,则结果为 true,否则为 false
(3)A && B,只有当 A 和 B 都为 true 的时候结果为 true,否则为 false
(4)A || B,只要 A 或 B 有一个为 true,则结果为 true,否则为 false
(5)! A,取反
4.1.2 &&比&的效率更高
&运算符无论如何都要运算两次得出结果【即先求出A,再求出B,最后得出最终结果】;&&运算符会出现只运算一次就能得出结果的情况【即若求出A的结果若是false,则不会计算B的结果,否则会再计算A的结果,得出最终结论】。| 与 || 的原理是一样的。
注:&与&&、++在前与++在后的区别:
(1)&与&&的区别:
public class Test {
public static void main(String[] args){
int num1 = 10;
int num2 = 11;
System.out.println((num1++==num2)&(++num1==num2));
System.out.println(num1);
}
}
结果如下:
false
12
public class Test {
public static void main(String[] args){
int num1 = 10;
int num2 = 11;
System.out.println((num1++==num2)&&(++num1==num2));
System.out.println(num1);
}
}
结果如下:
false
11
&&运算符比&运算符少一次运算,最终num1的结果会出现变化。
(2)++在前与++在后的区别:
++在前时,是先计算num1=num1+1,计算完之后再计算num1==num2的结果;++在后时,是先计算num1==num2的结果,计算完之后,再计算num1=num1+1。
4.2位运算符
4.2.1 十进制和二进制的转换:目标数除以2,若能除尽,则改为记作0,如果除不尽该位记作1,再对商继续除以2,以此类推,直到商为0,然后把每一位的结果反序组合就是对应的二进制。
4.2.2 二进制转十进制:从目标数最右侧算起,本位的数值乘以本位的权重(2的第几位的位数减一次方)得到一个乘积,将每一位的乘积相加就是对应的十进制。
4.3 运算符
(1)&(按位与);(2)|(按位或);(3)^(按位异或)
4.4 运算方式
(1)A & B:每一位的数字一一对应,如果都为1,则该位记作1,否则为0
(2)A | B:每一位的数字一一对应,只要有一个为1,则该位记作1,否则为0
(3)A ^ B:每一位的数字一一对应,相同记作0,不同记作1。
网硕互联帮助中心



评论前必须登录!
注册