运算符

image.png
注意自增自减的算法以及位置

  1. package operater;
  2. public class Demo04 {
  3. public static void main(String[] args) {
  4. int a = 3;
  5. int b = a++;//执行完这行代码先给b赋值,再自增
  6. System.out.println(a);
  7. //a++ a = a + 1
  8. int c = ++a;//先赋值再执行代码,先自增
  9. System.out.println(a);
  10. System.out.println(b);
  11. System.out.println(c);
  12. }
  13. }
  1. int a = 1;
  2. a = a++;
  3. system.out.println("a="+a);

可能有的人会认为输出结果为a = 2,这是错误的,a的值为1,我们对表达式进行分析,扫描表达式,遇到a++,将a=1压入栈中,此时a自增,变为2,进行计算,将栈中的1弹出,赋值给a,此时a的值仍然为1。

逻辑运算

  1. public class Demo05 {
  2. public static void main(String[] args) {
  3. //与 或 非
  4. boolean a = true;
  5. boolean b = false;
  6. System.out.println("a && b: "+(a&&b));
  7. //逻辑与运算:两个结果都为真,则为true
  8. System.out.println("a || b:"+(a||b));
  9. //逻辑或运算:一个个结果都为真,则为true
  10. System.out.println("!(a && b):"+!(a&&b));
  11. //如果是真,则变为假。如果是假,则变为真
  12. }
  13. }

位运算

  1. ackage operater;
  2. public class Demo06 {
  3. public static void main(String[] args) {
  4. /*
  5. A = 0011 1100
  6. B = 0000 1101
  7. A&B = 0000 1100
  8. A/B = 0011 1101
  9. A^B = 0011 0001
  10. ~B = 1111 0010
  11. << *2
  12. >> /2
  13. */
  14. System.out.println(2<<4);
  15. System.out.println(32>>2);
  16. }
  17. }

三元运算符

  1. package operater;
  2. //三元运算符
  3. public class Demo08 {
  4. public static void main(String[] args) {
  5. // x ? y :z
  6. //如果x==true,则结果为y,否则结果为z
  7. int score = 59;
  8. String type = score <60?"不及格":"及格";
  9. System.out.println(type);
  10. }
  11. }

运算符具有优先级

Java 语言中大部分运算符也是从左向右结合的,只有单目运算符、赋值运算符和三目运算符例外,其中,单目运算符、赋值运算符和三目运算符是从右向左结合的,也就是从右向左运算。

乘法和加法是两个可结合的运算,也就是说,这两个运算符左右两边的操作数可以互换位置而不会影响结果。运算符有不同的优先级,所谓优先级就是在表达式运算中的运算顺序。

一般而言,单目运算符优先级较高,赋值运算符优先级较低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单目运算符、三目运算符、赋值运算符具有右结合性。

Java 语言中运算符的优先级共分为 14 级,其中 1 级最高,14 级最低。在同一个表达式中运算符优先级高的先执行。表 1 列出了所有的运算符的优先级以及结合性

使用优先级为 1 的小括号可以改变其他运算符的优先级
源代码就是一份文档,源代码的可读性比代码运行效率更重要。 因此在这里要提醒大家:

  • 不要把一个表达式写得过于复杂,如果一个表达式过于复杂,则把它分成几步来完成。
  • 不要过多地依赖运算符的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用()来控制表达式的执行顺序。

包机制

  • 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间
  • 包语句的语法格式为:
  • 一般利用公司域名作为倒置包名
  • 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包,使用import语句完成此功能