表达式
大多数的逻辑行都包含表达式,如计算面积就是一个简单的表达式,表达式可以分解为运算符(操作符)与操作数,运算符是为了完成某个功能,它们由如+
、-
这样的符号或者其它特定的关键字表示,运算符需要数据来进行计算,这样的数据被称为操作数。在计算面积的示例中,3和4为操作数,而area则称为表达式,如:
java
package cc.neeo.operator;
public class OperatorDemo1 {
public static void main(String[] args) {
int length = 3;
int width = 4;
int area = length * width;
System.out.println(area); // 12
}
}
我们将长和宽通过变量保存起来,然后通过表达式来计算它的面积,计算的结果保存在area中,通过打印area输出结果。 由运算符和表达式组成了程序的基本结构。本节我们主要讲解常用的运算符与参与运算的表达式。
算术运算符
算数运算符和我们数学上计算的符号使用是一致的,java支持的算数运算符.
java
package cc.neeo.operator;
public class OperatorDemo1 {
public static void main(String[] args) {
print(10, 3);
}
public static void print(int a, int b) {
// 1. 列出java中的算术运算符
System.out.println(a + b); // 加法
System.out.println(a - b); // 减法
System.out.println(a * b); // 乘法
// 除法,这里的a和b都是整数,数学上相除结果是3.333.....
// 但java中不是这样的,java中,表达式的最终结果类型,取决于最高类型,a和b都是整型
// 所以a/b的结果是也是整型3
System.out.println(a / b); // 3
// 想要得到小数,就先转下类型,让其最高类型是浮点型
System.out.println((double)a / b);
System.out.println(a % b); // 取余
}
}
注意,两个整数相除,其结果一定是整数,因为最高类型是整数.
运算符+
在java中的特殊用途
再参与字符串远算的时候,作为连接符,或者拼接符来用的.最终结果依然是个字符串.
java
int length = 3;
int width = 4;
int area = length * width;
System.out.println("面积为: " + area); // 面积为: 12
那问题来了,什么时候是运算,什么时候是连接呢?其规则就是"能算则算,不能算就是连接在一起".
自增自减运算符
++a
,a++
,--a
,a--
这四个用于对于变量a
的自增和自减.区别是:
a++
是后缀自增运算符,即:- 它首先返回变量 a 的当前值。
- 然后才将 a 的值增加 1。
++a
是前缀自增运算符,即:- 它首先将变量 a 的值增加 1。
- 然后返回增加后的值。
a--
是后缀自减运算符,即:- 它首先返回变量 a 的当前值。
- 然后才将 a 的值减去 1。
--a
是前缀自减运算符,即:- 它首先将变量 a 的值减去 1。
- 然后返回减完之后的值。
注意,自增自减只能作用于变量,而不能作用于字面量,即你能a++
,不能2++
.
首先,自增自减单独使用运算符放到变量左右是没区别的,即没有变量赋值的情况.
java
int a = 10;
// 直接加加减减,没有变量接收加减之后的结果,都可以理解为是 a = a + 1,或者a = a - 1
a++;
++a;
System.out.println(a); // 值是12
a--;
--a;
System.out.println(a); // 值是10
但是,如果有变量接收或在表达式中,或者同时具有其它操作的时候,,运算符放到变量左边和右边会有明显的区别:
java
// 先来看自增的情况
int a = 10;
int res1 = a++;
// 下面的打印,a的值是11这是肯定的,因为最终是加一了
// 但是res1的值是10,因为其过程是先把a赋值给res1,然后再加一,所以res1的值还是10
System.out.println("a: " + a + "\tres1: " + res1); // a: 11 res1: 10
// 下面的打印,a的值是12,这是肯定的,因为最终是加一了
// res2的值也是12, 因为其过程是先加一,然后再赋值给res2
int res2 = ++a;
System.out.println("a: " + a + "\tres2: " + res2); // a: 12 res2: 12
System.out.println("------------------------------------------------------");
// 自减的情况和自增一样
// 程序运行到这里,a的值是12
int res3 = a--;
// 此时打印的a的结果是11,这是肯定的,因为最终是做了一次自减操作
// 但是res3的值是12,因为其过程是先把a赋值给res3,然后再减一,所以res3的值还是12
System.out.println("a: " + a + "\tres3: " + res3); // a: 11 res3: 12
int res4 = --a;
// 程序运行到这里,a的值是10,是因为减减a是先自减再把a的结果赋值给res4
// 所以res4的值也是10
System.out.println("a: " + a + "\tres4: " + res4); // a: 10 res4: 10
来个表达式操作应用,下面res的值是多少?
java
int a = 1;
// 此时 --a 使 a 变为 0 并返回 0 参与加法运算, 然后 a-- 使 a 变为 -1 但返回 0 再参与加法运算, 结果是 0 + 0 = 0
int res = --a + a--;
int a = 1;
// 此时 ++a 使 a 变为 2 并返回 2 参与加法运算, 然后 a++ 使 a 变为 3 但返回 2 再参与加法运算, 结果是 2 + 2 = 4
int result = ++a + a++;