操作符
Agenda
•   基本介绍
•   优先级
•   赋值操作符=
•   算数运算符
•   一元运算符
•   自增与自减
•   关系运算符
•   逻辑操作符
•   位操作符
•   三元if-else操作符
•   字符串合并
•   强制类型转换
•   溢出
基本介绍
• Java发展自c/c++, 因此它们的操作符基本上
  是相同的, Java操作符在c/c++的基础上作了
  一些简化和改进. 如果你熟悉c/c++的操作符,
  那么可以略过此章节;
• 基本的java操作符有: 加(+), 减(-), 乘(*), 除(/),
=(赋值), ==(等于), !=(不等于); 这些操作符基本
上只用于原语类型, 其中=/==/!=可以用于所有
的对象, +/+=也可以用于字符串.
优先级
• 遵循如下原则: 有括号先算括号, 乘除优先
  于加减;
• 示例: demo/Demo1.java
int x = 1, y = 2, z = 3;
int a = x + y - 2/2 + z; // (1)
int b = x + (y - 2)/(2 + z); // (2)
System.out.println("a = " + a + " b = " + b);
赋值操作符=
• 赋值操作符是将某个值赋给某个指定的变量;
  赋值操作中左值(lvalue)是指等号左边的变量,
  右值(rvalue)是指等号右边的常量(4, “String”)/
  表达式(a+1)/变量;
• 原语类型的赋值比较直观, 比如 int a = 4; 整型
  变量a的值为4;
• 引用赋值: 将指向某个对象的引用赋值给另一
  个变量时, 该变量会指向同一个对象; eg, c和d
  是两个非原语类型的对象:
c=d; // c和d将会指向同一个对象
• 示例: demo/Demo2.java
赋值操作符=
• 在调用方法的参数传递中, 也会发生引用的
  赋值, 效果与上述的一致.
• 示例: demo/Demo3.java
算数运算符
• 基本算数运算符: +, -, *, /, %;
• 组合基本运算符和赋值:
+=, -=, *=, /=, %=, 先进行基本运算然后将结果
赋给左值; eg: i+=3 等价于i=i+3
• 示例: demo/Demo4.java
一元运算符
• 一元运算符(+/-) 与 加减运算符是一样的, 但
  它们的操作数只有一个, 示例:
x=-a;
x=a * -b;
x = a * (-b);
自增与自减
• 自增运算符(++)对变量加1, 比如i++等价于i=i+1;
  自减运算符(--)对变量减1, 比如i--等价于i=i-1;
• 自增/减运算符可以使用在变量的前面或者后
  面, 如果位于变量的前面则先返回变量的值, 然
  后自增/减; 如果位于后面则先自增/减, 然后返
  回变量值, 示例:
int i = 5;
int j = i++;   // j == 5, i == 6
int k = ++i;   // k == 7, i == 7
• 示例: demo/Demo5.java
关系运算符
• 关系运算符返回布尔值(boolean), 关系运算符
  有<(小于), >(大于), <=(小于或等于), >=(大于或
  等于), ==(等于), !=(不等于);
• 示例:
if(i == 4) {         //如果i等于4, 则执行相应的动作
……
} else if (i > 4) { //如果i大于4, 则执行相应的动作
……
} else {
……
}
关系运算符
               判断对象是否相等
• 关系运算符==用于判断两个对象是否指向同一
  个对象, 如果指向同一个对象则返回true, 否则
  返回false;
• 示例:
Integer i1 = new Integer(4);
Integer i2 = new Integer(4);
i1==i2; // 返回false, 因为i1和i2指向两个不同的对象.
Integer i3 = i1;
i1==i3; // 返回true, i1和i3指向同一个对象
• 通过覆盖Object类中的equals方法来实现对象
  的比较, 将会在以后介绍.
逻辑操作符
• 逻辑操作符&&(与), ||(或), !(非) 返回一个布尔值
  (boolean);
逻辑与: 表达式1&&表达式2, 当两个表达式同时为true, 结果为true否则为
 false;
逻辑或: 表达式1&&表达式2, 当两个表达式有至少一个为true, 结果为true
 否则为false;
逻辑非: !表达式, 表达式返回true结果为false否则为true;
• 示例:
if(i==1 && j==2) {   // 逻辑与
     …….
}
if(k!=3) {           // 逻辑非
     …….
}
逻辑操作符
           短路运算
• 对于逻辑与&&操作, 从左到右依次计算表达
  式, 遇到返回为false则停止计算并返回false;
  如果所有的表达式都返回true则返回true;
• 对于逻辑或||操作, 从左到右依次计算表达
  式, 遇到返回为true则停止计算并返回true;
  如果所有的表达式都返回false则返回false;
• 这种短路设计的好处是避免不必要的运算,
  对于性能有好处;
• 示例: demo/Demo6.java
位操作符
• 位与(&), 如果参与运算均为1则返回1, 否则返回0;
• 位或(|), 如果参与运算的至少有一个为1则返回1, 否
  则返回0;
• 示例:
int i = 100;
int j = 120;
print(Integer.toBinaryString(i)); // 1100100
print(Integer.toBinaryString(j)); // 1111000
print(Integer.toBinaryString(i&j)); // 1100000
print(Integer.toBinaryString(i|j)); // 1111100


• 示例: demo/Demo7.java
位操作符
• 左移(<<), 将比特位向左移指定的位数; 比如: i<<5 表示i
   的比特位向左移动5位, 并返回位移操作之后的数字, i的
   值不变;
• 右移(>>),将比特位向右移指定的位数, 空出来的比特位
   如下处理:
1), 如果该数值为正数则补0;
2), 如果该数值为负数则补1;
• 无符号右移(>>>), 与>>操作的不同之处在无符号右移始
   终在高位补零;
• 取反(~), 对某个数进行取反操作, 如果比特位为0则置为1,
   否则置为0; 取反是一个一元操作符.
• 示例: demo/Demo8.java
三元if-else操作符
• java中唯一一个三元操作符, 用于条件判断然后返回一个结果, 格
    式:expression?val1:val2;
expression需要返回true或者false, 如果true则
返回val1, 否则返回val2;
• 该表达式等价于if/else条件判断, 示例:
return i<100?i*100:i*10;
等价于:
if(i<100) {
    return i*100;
} else {
    return i*10;
}
• 示例: demo/Demo9.java
字符串合并
             操作符
• 字符串合并操作符: +/+=, 与加法运算相同; 示
   例: “hello” + “world” 返回hellworld;
• 在字符串合并操作中如果操作数不是一个字符
   串类型, 那么会将该操作数转换为字符串, 分两
   种情况:
1, 原语类型, 直接转换为字符串. 比如:
“string” + 1 返回string1
2, 对象类型, 则调用该对象上的toString方法转换
   为字符串
• 示例: demo/Demo10.java
强制类型转换
• 对于整数类型(int, long), 由字节数较少的转换为字节数较多的,
  无需强制类型转换; 反过来则需要强制类型转换, 示例:
int i = 200;
long lng = i; // 无需转换
long lng = (long)i;
int j = (int)lng; // 必须强制类型转换
• 在浮点型(double, float)与整型之间进行转换时, 会将小数点之后
  的部分给截掉, 示例:
int i = (int)2.5f; // i = 2
• 在强制类型转换中, 如果超出了目标类型的范围则会出现字节被
  截断的情况, 比如:
long lng = 2147483648L;         // 超出了int类型的范围
int i = (int)lng;               // i= -2147483648
• 对象类型转换通常发生在将一个对象转换为该对象对应的具体
  类型, eg:
Object obj = new Integer(4);
Integer itg = (Integer)obj;
溢出
• 对于数字类型(int, long, double, float等) 都有它
  们对应的范围, 比如int是-2147483648 –
  2147483647, 如果在进行算术运算时结果超出
  了该范围则会出现溢出.
• 示例:
int big = Integer.MAX_VALUE;
System.out.println("big = " + big);
int bigger = big * 4;
System.out.println("bigger = " + bigger); // -4

• 当出现溢出时, java不会提示仸何错误, 因此必
  须小心在程序中避免这种情况发生.
END

3, operators

  • 1.
  • 2.
    Agenda • 基本介绍 • 优先级 • 赋值操作符= • 算数运算符 • 一元运算符 • 自增与自减 • 关系运算符 • 逻辑操作符 • 位操作符 • 三元if-else操作符 • 字符串合并 • 强制类型转换 • 溢出
  • 3.
    基本介绍 • Java发展自c/c++, 因此它们的操作符基本上 是相同的, Java操作符在c/c++的基础上作了 一些简化和改进. 如果你熟悉c/c++的操作符, 那么可以略过此章节; • 基本的java操作符有: 加(+), 减(-), 乘(*), 除(/), =(赋值), ==(等于), !=(不等于); 这些操作符基本 上只用于原语类型, 其中=/==/!=可以用于所有 的对象, +/+=也可以用于字符串.
  • 4.
    优先级 • 遵循如下原则: 有括号先算括号,乘除优先 于加减; • 示例: demo/Demo1.java int x = 1, y = 2, z = 3; int a = x + y - 2/2 + z; // (1) int b = x + (y - 2)/(2 + z); // (2) System.out.println("a = " + a + " b = " + b);
  • 5.
    赋值操作符= • 赋值操作符是将某个值赋给某个指定的变量; 赋值操作中左值(lvalue)是指等号左边的变量, 右值(rvalue)是指等号右边的常量(4, “String”)/ 表达式(a+1)/变量; • 原语类型的赋值比较直观, 比如 int a = 4; 整型 变量a的值为4; • 引用赋值: 将指向某个对象的引用赋值给另一 个变量时, 该变量会指向同一个对象; eg, c和d 是两个非原语类型的对象: c=d; // c和d将会指向同一个对象 • 示例: demo/Demo2.java
  • 6.
    赋值操作符= • 在调用方法的参数传递中, 也会发生引用的 赋值, 效果与上述的一致. • 示例: demo/Demo3.java
  • 7.
    算数运算符 • 基本算数运算符: +,-, *, /, %; • 组合基本运算符和赋值: +=, -=, *=, /=, %=, 先进行基本运算然后将结果 赋给左值; eg: i+=3 等价于i=i+3 • 示例: demo/Demo4.java
  • 8.
    一元运算符 • 一元运算符(+/-) 与加减运算符是一样的, 但 它们的操作数只有一个, 示例: x=-a; x=a * -b; x = a * (-b);
  • 9.
    自增与自减 • 自增运算符(++)对变量加1, 比如i++等价于i=i+1; 自减运算符(--)对变量减1, 比如i--等价于i=i-1; • 自增/减运算符可以使用在变量的前面或者后 面, 如果位于变量的前面则先返回变量的值, 然 后自增/减; 如果位于后面则先自增/减, 然后返 回变量值, 示例: int i = 5; int j = i++; // j == 5, i == 6 int k = ++i; // k == 7, i == 7 • 示例: demo/Demo5.java
  • 10.
    关系运算符 • 关系运算符返回布尔值(boolean), 关系运算符 有<(小于), >(大于), <=(小于或等于), >=(大于或 等于), ==(等于), !=(不等于); • 示例: if(i == 4) { //如果i等于4, 则执行相应的动作 …… } else if (i > 4) { //如果i大于4, 则执行相应的动作 …… } else { …… }
  • 11.
    关系运算符 判断对象是否相等 • 关系运算符==用于判断两个对象是否指向同一 个对象, 如果指向同一个对象则返回true, 否则 返回false; • 示例: Integer i1 = new Integer(4); Integer i2 = new Integer(4); i1==i2; // 返回false, 因为i1和i2指向两个不同的对象. Integer i3 = i1; i1==i3; // 返回true, i1和i3指向同一个对象 • 通过覆盖Object类中的equals方法来实现对象 的比较, 将会在以后介绍.
  • 12.
    逻辑操作符 • 逻辑操作符&&(与), ||(或),!(非) 返回一个布尔值 (boolean); 逻辑与: 表达式1&&表达式2, 当两个表达式同时为true, 结果为true否则为 false; 逻辑或: 表达式1&&表达式2, 当两个表达式有至少一个为true, 结果为true 否则为false; 逻辑非: !表达式, 表达式返回true结果为false否则为true; • 示例: if(i==1 && j==2) { // 逻辑与 ……. } if(k!=3) { // 逻辑非 ……. }
  • 13.
    逻辑操作符 短路运算 • 对于逻辑与&&操作, 从左到右依次计算表达 式, 遇到返回为false则停止计算并返回false; 如果所有的表达式都返回true则返回true; • 对于逻辑或||操作, 从左到右依次计算表达 式, 遇到返回为true则停止计算并返回true; 如果所有的表达式都返回false则返回false; • 这种短路设计的好处是避免不必要的运算, 对于性能有好处; • 示例: demo/Demo6.java
  • 14.
    位操作符 • 位与(&), 如果参与运算均为1则返回1,否则返回0; • 位或(|), 如果参与运算的至少有一个为1则返回1, 否 则返回0; • 示例: int i = 100; int j = 120; print(Integer.toBinaryString(i)); // 1100100 print(Integer.toBinaryString(j)); // 1111000 print(Integer.toBinaryString(i&j)); // 1100000 print(Integer.toBinaryString(i|j)); // 1111100 • 示例: demo/Demo7.java
  • 15.
    位操作符 • 左移(<<), 将比特位向左移指定的位数;比如: i<<5 表示i 的比特位向左移动5位, 并返回位移操作之后的数字, i的 值不变; • 右移(>>),将比特位向右移指定的位数, 空出来的比特位 如下处理: 1), 如果该数值为正数则补0; 2), 如果该数值为负数则补1; • 无符号右移(>>>), 与>>操作的不同之处在无符号右移始 终在高位补零; • 取反(~), 对某个数进行取反操作, 如果比特位为0则置为1, 否则置为0; 取反是一个一元操作符. • 示例: demo/Demo8.java
  • 16.
    三元if-else操作符 • java中唯一一个三元操作符, 用于条件判断然后返回一个结果,格 式:expression?val1:val2; expression需要返回true或者false, 如果true则 返回val1, 否则返回val2; • 该表达式等价于if/else条件判断, 示例: return i<100?i*100:i*10; 等价于: if(i<100) { return i*100; } else { return i*10; } • 示例: demo/Demo9.java
  • 17.
    字符串合并 操作符 • 字符串合并操作符: +/+=, 与加法运算相同; 示 例: “hello” + “world” 返回hellworld; • 在字符串合并操作中如果操作数不是一个字符 串类型, 那么会将该操作数转换为字符串, 分两 种情况: 1, 原语类型, 直接转换为字符串. 比如: “string” + 1 返回string1 2, 对象类型, 则调用该对象上的toString方法转换 为字符串 • 示例: demo/Demo10.java
  • 18.
    强制类型转换 • 对于整数类型(int, long),由字节数较少的转换为字节数较多的, 无需强制类型转换; 反过来则需要强制类型转换, 示例: int i = 200; long lng = i; // 无需转换 long lng = (long)i; int j = (int)lng; // 必须强制类型转换 • 在浮点型(double, float)与整型之间进行转换时, 会将小数点之后 的部分给截掉, 示例: int i = (int)2.5f; // i = 2 • 在强制类型转换中, 如果超出了目标类型的范围则会出现字节被 截断的情况, 比如: long lng = 2147483648L; // 超出了int类型的范围 int i = (int)lng; // i= -2147483648 • 对象类型转换通常发生在将一个对象转换为该对象对应的具体 类型, eg: Object obj = new Integer(4); Integer itg = (Integer)obj;
  • 19.
    溢出 • 对于数字类型(int, long,double, float等) 都有它 们对应的范围, 比如int是-2147483648 – 2147483647, 如果在进行算术运算时结果超出 了该范围则会出现溢出. • 示例: int big = Integer.MAX_VALUE; System.out.println("big = " + big); int bigger = big * 4; System.out.println("bigger = " + bigger); // -4 • 当出现溢出时, java不会提示仸何错误, 因此必 须小心在程序中避免这种情况发生.
  • 20.