基本运算符
package com.github.hcsp;
public class Main {
public static void main(String[] args) {
int a = 1 + 1;
double c = 5.0 / 2;
double b = 1.0 + 1d;
System.out.println(9 % 5);
System.out.println(-9 % 5);
System.out.println(isOdd(1));
System.out.println(isOdd(3));
System.out.println(isOdd(-1));
}
public static boolean isOdd(int number) {
return number % 2 != 0;
}
}
a+=1发了生三步
- 1将a的值内存取出来放到cpu
- cpu中进行+1
- 在写回到内存

自增自减运算符
package com.github.hcsp;
public class Main {
public static void main(String[] args) {
int a = 0;
int b = 0;
System.out.println(a++);
System.out.println(++b);
}
}
比较匀速符
逻辑运算符
package com.github.hcsp;
public class Main {
public static void main(String[] args) {
System.out.println(false && false);
System.out.println(true && true);
System.out.println(false && true);
System.out.println(true || true);
System.out.println(false && false);
System.out.println(!true);
}
}
package com.github.hcsp;
public class Main {
public static void main(String[] args) {
Boolean config = getConfig();
if(config !=null && config) {
}
}
public static Boolean getConfig() {
}
}
三元运算符
位运算符
package com.github.hcsp;
public class Main {
public static void main(String[] args) {
System.out.println(~3);
}
}



- 为什么搞这么复杂,硬件电路+表示+/-
- 使用补码的好处就是可以同时完成加法和减法\


按位与

按位或

异或


左移

右移

位运算的使用场景
- 假设一个class有32个属性,属性不互斥,32个布尔值存放这32个属性,最常见的直接用32个布尔值存放这些属性,结果就是一个布尔值内存中至少一个占用一个字节
- 这样的情况是一个对象至少占了32个字节,如果对象多的话,占用内存就大
- 另外一种方案是一个int四个字节32个byte,一个字节8个位,利用int存放32个bool值,32个byte值需要4个字节\

问题怎么把位转成布尔值
- Modifier.java,访问修饰符类
- java虚拟机内部尽可能要减少内存,把是不是public,protected\

- public 操作符 ,0x00 00 00 01, 16位的字符可以转成二进制的位
- 设置预先定好的值某个位上的属性是1,其余是0
- 实现了把若干的属性设置到int中去
- 被置位\


- 总结:一堆布尔值如何把塞到一个int中的某个位,设置的时候按位或,读取的时候用按位与运算
运算的优先级
字符串的加法
- 字符串加法的时候会调用对象的toString方法
- 连接很长的字符串加法的时候,jdk内部会自动转成StringBuilder方法,减轻内存压力,提高性能