类型转换
无论是基本数据类型还是引用类型,都可能出现从一种类型转换为另外一种类型。
自动类型转换
大类型 = 小类型 自动转换;
-
在进行四则运算的过程中,编译器会自动进行类型转换(自动类型转换)。boolean类型是不可以和其他类型做类型转换的。
-
转换的规则:
char ↓ byte --> short --> int --> long --> float --> double
强制类型转换
小类型 = (小类型)大类型
-
执行强转动作的时候,可能会发生数据精度问题,所以强制的时候一定要注意。
-
如果真的要强转,你要保证类型转换之后,数据不会出现问题。
运算符
在Java中提供了一些可以帮助我们做逻辑处理、数值运算的符号。这些符号统称为运算符。Java中的运算符一共有7种。
运算符概念
赋值运算符
赋值运算符是整个语言中唯一的一个自右向左进行运算的。
赋值运算符是整个语言中优先级别最低的。
int num = 19; // = 就是赋值运算符
算数运算符
算数运算符中包含:+ 、 - 、 * 、 / 、% 、 ++ 、 --
-
注意事项
-
+
加号左右链接符号,自己一定要注意拼接字符串产生的问题 -
++
和--
-
如果是单独一条语句 无所谓前后问题 都是自增、自减1
-
如果不是单独一条语句
-
前加 、前减 : 先自增、先自减 然后运算
-
后加、后减 : 先运算 然后在自增、自减
-
-
-
关系运算符
>
<
>=
<=
==
!=
instanceof
-
注意事项
-
关系运算符最后的结果是一个boolean类型的值
-
>
<
>=
<=
只能比较基本数据类型中除了boolean
以外的类型 -
==
!=
所有的类型都可以比较 -
instanceof
只能比较引用类型 判定某个值是否属于某个具体的类型
-
逻辑运算符
& | && || ^ !
// 测试学习逻辑运算符 public class LogicOperator{ public static void main(String[] args) { //1:逻辑运算符最后的结果是一个boolean值 逻辑运算左右两边的操作数一定也是个boolean值 System.out.println("======测试逻辑& 运算符======="); System.out.println(true&true); System.out.println(true&false); System.out.println(false&true); System.out.println(false&false); System.out.println("======测试逻辑&& 短路与 运算符======="); System.out.println(true&&true); System.out.println(true&&false); System.out.println(false&&true); System.out.println(false&&false); System.out.println("======测试逻辑| 运算符======="); System.out.println(true|true); System.out.println(true|false); System.out.println(false|true); System.out.println(false|false); System.out.println("======测试逻辑|| 短路或 运算符======="); System.out.println(true||true); System.out.println(true||false); System.out.println(false||true); System.out.println(false||false); System.out.println("======测试逻辑! 运算符======="); System.out.println(!true); System.out.println(!false); System.out.println("======测试逻辑^ 异或 运算符======="); System.out.println(true^true); System.out.println(true^false); System.out.println(false^true); System.out.println(false^false); } }
-
注意事项
-
& | ^ 在后面的开发中是不会使用的
-
&和&& 的区别? |和||的区别?
-
&&而言第一个操作数如果是false,第二个操作数不运算,直接出结果false,但是&会将两个操作数都进行运算;
-
||而言第一个操作数如果是true,第二个操作数不运算,直接出结果true,但是|会将两个操作数都进行运算;
-
-
扩展运算
扩展运算符是 算数运算符+赋值运算符 或者是 位运算符+赋值运算 的结合体。
+= -= *= /= %= >>= <<= &= |=
// 测试学习扩展运算符 public class ExtendsOperator{ public static void main(String[] args) { // 编写如下代码 int sum = 0; int n = 10; // 让sum中存储 sum+n的和 sum = sum + n; // sum += n; => sum = sum * n; System.out.println("累加的和是:"+sum); // 好玩的 byte b = 0; int s = 10; //b = (byte)(b+s); b += s;//=> b = b+s; System.out.println(b); } }
注意事项:
-
扩展运算符的优势:提升编译速度、开发速度、自动进行强制类型转换
-
扩展运算符的缺点:不利于阅读
条件运算符
也叫三目运算符,是java中唯一的一个三目运算符。
表达式1?表达式2:表达式3;
表达式1的值是一个boolean值 其余表达2和表达式3的类型尽量保证统一,防止后期报错。
位运算符
位运算符就是用来提升算数的运算效率的,因为它可以直接基于二进制进行运算。
// 测试学习位运算符 public class BitOperator{ public static void main(String[] args) { // 按位& /* 100 101 ------ 100 --> 4 */ System.out.println(4&5); // 按位| /* 100 101 ------ 101 --> 5 */ System.out.println(4|5); // 按位^ /* 100 101 ------ 001 --> 1 */ System.out.println(4^5); // 按位~ 符号位也要取反 /* 0 0 100 ------ 1 1 001 */ System.out.println(~4); // 按位右移>> M>>N = M/2^N /* 32 0 0 100000 右移4位 --> 将右侧的4个二进制数字干掉 0 0 10 补位4位 --> 往左侧补 0000 0 010 =>2 -32 1 0 100000 --> 1 1 011111 --> 1 1 100000 右移4位 --> 将右侧的4个二进制数字干掉 1 1 10 补位4位 --> 往左侧补 1111 1 1 10 通过符号位填充的 */ System.out.println(32>>4); System.out.println(-32>>4); // 按位左移<< M<<N = M*2^N System.out.println(2<<4); System.out.println(-2<<4); // 无符号右移>>> M>>>N System.out.println(32>>>4); System.out.println(-32>>>4); } }
运算符优先级问题
不要试图通过运算符的优先级别去确定表达式的运算顺序。
-
如果你没有办法确定会先运算哪一个,那就加
()
解决所有问题
(num>>1) == num