温故知新
上一节我们讲到了 Java 中的赋值操作符, 用案例的方式讲解了赋值操作符的使用方式, 以及其作用于基本数据类型和引用数据类型的不同效果. 请回答一下几个问题:
赋值表达式的左值和右值分别需要符合什么规则?
赋值操作符作用于基本数据类型和作用于引用数据类型有什么异同?
如果发现有回答不上的问题, 请回顾上节内容! 如果还不懂, 请直接 @我!
更上一层楼
今天我们主要讲解以下内容哦!!!
算术操作符
自增自减操作符
关系操作符
算术操作符
基本算术操作符
Java 中的基本算术操作符主要包括加号 (+), 减号(-), 乘号(*), 除号(/) 和取模 (%) 运算.
运算示例
- public class Operation {
- public static void main(String [] args) {
- int a = 10;
- int b = 5;
- int c = a + b;
- int d = a - b;
- int e = a / b;
- int f = a * b;
- int g = 3 % 2;
- System.out.println("c="+c+";d="+d+";e="+e+";f="+f+";g="+g);
- }
- }
- //output
- //c=15;d=5;e=2;f=50;g=1
- //+-*/ 相对简单, 就不多叙述了; 重点是取模运算(%), 也叫做取余运算
- // 即取整除之后的余数
组合操作符
在 Java 中可以把操作符和赋值操作符合并为一个操作符, 如 +=,-=,*=,/= 等; 在这里我们主要举例基本算术操作符和赋值操作符的组合使用. Java 中所有的操作符都可以与赋值操作符搭配, 只要其有实际意义就行.
运算示例
- public class Operation {
- public static void main(String [] args) {
- int a = 10;
- // 相当于 a = a + 5
- int a += 5;
- System.out.println(a);
- // 相当于 a = a - 5
- int a -= 5;
- System.out.println(a);
- // 相当于 a = a * 5
- int a *= 5;
- System.out.println(a);
- // 相当于 a = a / 5
- int a /= 5;
- System.out.println(a);
- }
- }
- //output
- //15
- //5
- //50
- //2
加减算术操作符的特殊用法
+,- 算术操作符, 既可以作为一元操作符, 也可以作为二元操作符(元的概念, 几元指有几个值参与了操作!)
一元减号操作符的作用是转变数据的符号, 如 1 => -1; 而一元加号操作符的作用是将较小类型的操作数提升为 int 类型, 如把一个 short 数提升为 int 类型.
自增自减操作符
Java 提供了大量的快捷运算操作符. 其中, 自增和自减操作符是日常中用的比较多的. 自增操作符用符号 ++ 表示, 自减操作符用符号 -- 表示.
自增自减操作符有两种使用方式(假设我们有一个变量 a):
前缀式:++a, 其表示先执行运算, 再生成变量的值作为结果.
后缀式:--a, 其表示先生成变量的值作为结果, 再进行运算.
运算示例
- public class Operation {
- public static void main(String [] args) {
- int a = 5;
- // 相当于 a = a + 1
- System.out.println(a++);
- // 相当于 a = a + 1
- System.out.println(++a);
- }
- }
- //output
- //5
- //6
- // 可能会有同学疑惑, 为什么结果是这样的呢?
- //a++, 表示先生成变量的值作为结果, 再进行运算
- // 因此返回的是没进行运算前的值
- // 因此是 5
- //++a, 表示先进行运算, 再生成变量的值作为结果
- // 因此返回的是进行运算之后的值
- // 因此是 6
关系操作符
关系操作符是判断两个值或者说两个对象之间关系的操作符, 其返回一个 boolean 结果. 关系操作符包括>,<,>=,<=,==,!=.== 和!= 适用于所有的基本数据类型, 而其他操作符不适用于 boolean 类型.
运算示例
- public class Operation {
- public static void main(String [] args) {
- int a = 10;
- int b = 5;
- System.out.println("a>b:"+(a>b));
- System.out.println("a<b:"+(a<b));
- System.out.println("a>=b:"+(a>=b));
- System.out.println("a<=b:"+(a<=b));
- System.out.println("a!=b:"+(a!=b));
- System.out.println("a==b:"+(a==b));
- }
- }
- //output
- //a>b:true
- //a<b:false
- //a>=b:true
- //a<=b:false
- //a!=b:true
- //a==b:false
== 操作符到底在比较什么?
请看以下例子:
- public class Operation {
- public static void main(String [] args) {
- Integer i1 = new Integer(10);
- Integer i2 = new Integer(10);
- Value v1 = new Value();
- Value v2 = new Value();
- v1.i = v2.i = 10;
- System.out.println("i1 == i2?" + i1 == i2);
- System.out.println("i1 != i2?" + i1 != i2);
- System.out.println("i1.equals(i2)?" + i1.equals(i2));
- System.out.println("v1 == v2?" + v1 == v2);
- System.out.println("i1.equals(i2)?" + i1.equals(i2));
- }
- class Value {
- int i;
- public void setI(int i) {
- this.i = i;
- }
- public int getI() {
- return this.i;
- }
- }
- }
- //output
- //i1 == i2?false
- //i1 != i2?true
- //i1.equals(i2)?true
- //v1 == v2?false
- //i1.equals(i2)?false
在对以上案例的答案进行解读之前, 我们需要先清楚一个知识点:== 操作符和!= 操作符比较基本数据类型时比较的是值, 而比较对象时比较的是对象的引用. 因此对于前两个输出, 我们可以理解了, 因为通过 new 操作符获得的 Integer 对象, 在内存中都有各自的物理地址, 因此他们的引用是不同的(引用实际放的就是物理地址).
那么如何比较两个对象的实际内容是否相等呢? 所有的对象都有 equals 方法, 可用于比较对象的实际内容是否相等. 但是这个方法不适用于基本数据类型.
那么我们就可以理解, 第三个输出, 由于 i1 和 i2 的值都是 10, 因此他们通过 equals 方法比较出来是相等的. 但是为什么第四, 第五个输出又是 false 呢? 因为 equals 方法默认比较的实际还是对象的引用, 除非我们重写该方法, 并重新定义其实现. 很显然, Integer 这个类中, 重写了该方法.
时时回顾
今天我们主要讲解了 Java 中的算术运算符, 自增自减操作符和关系操作符. 这些操作符在我们日后的生活中经常用到, 因此务必牢牢掌握!
来源: https://www.cnblogs.com/lurker-yaojiang/p/10480818.html