表达式:用运算符连接起来的式子
四种运算
public class OperatorDemo01 {
public static void main(String[] args) {
int a = 3;
int b = 4;
System.out.println(a + b);// 7
System.out.println(a - b);// -1
System.out.println(a * b);// 12
System.out.println(a / b);// 计算机结果是0,为什么不是0.75呢?
System.out.println(a % b);// 3
}
}
“+”号的两种用法
-
第一种:对于
+
两边都是数值的话,+
就是加法的意思 -
第二种:对于
+
两边至少有一边是字符串得话,+
就是拼接的意思 -
public class OperatorDemo02 {
public static void main(String[] args) {
// 字符串类型的变量基本使用
// 数据类型 变量名称 = 数据值;
String str1 = “Hello”;
System.out.println(str1); // HelloSystem.out.println("Hello" + "World"); // HelloWorld String str2 = "Java"; // String + int --> String System.out.println(str2 + 520); // Java520 // String + int + int // String + int // String System.out.println(str2 + 5 + 20); // Java520
}
}
自加自减运算
理解:++
运算,变量自己的值加1。反之,--
运算,变量自己的值减少1,用法与++
一致。
1、单独使用
- 变量在单独运算的时候,变量
前++
和变量后++
,变量的是一样的; - 变量
前++
:例如++a
。 - 变量
后++
:例如a++
。 - public class OperatorDemo3 {
public static void main(String[] args) {
// 定义一个int类型的变量a
int a = 3;
//++a;
a++;
// 无论是变量前++还是变量后++,结果都是4
System.out.println(a);
}
}
2、复合使用
-
和
其他变量放在一起使用
或者和输出语句放在一起使用
,前++
和后++
就产生了不同。 -
变量
前++
:变量先自身加1,然后再将加1后的结果进行其他使用。 -
变量
后++
:变量先拿去使用,然后再自身加1。
public class OperatorDemo03 {
public static void main(String[] args) {
// 其他变量放在一起使用
int x = 3;
//int y = ++x; // y的值是4,x的值是4,
int y = x++; // y的值是3,x的值是4
System.out.println(x);
System.out.println(y);
System.out.println("==========");
// 和输出语句一起
int z = 5;
//System.out.println(++z);// 输出结果是6,z的值也是6
System.out.println(z++);// 输出结果是5,z的值是6
System.out.println(z);
int a = 1;
a = a++;//(1)先取a的值“1”放操作数栈(2)a再自增,a=2(3)再把操作数栈中的"1"赋值给a,a=1
int i = 1;
int j = i++ + ++i * i++;
/*
从左往右加载
(1)先算i++
①取i的值“1”放操作数栈
②i再自增 i=2
(2)再算++i
①i先自增 i=3
②再取i的值“3”放操作数栈
(3)再算i++
①取i的值“3”放操作数栈
②i再自增 i=4
(4)先算乘法
用操作数栈中3 * 3 = 9,并把9压会操作数栈
(5)再算求和
用操作数栈中的 1 + 9 = 10
(6)最后算赋值
j = 10
*/
}
}
小结:
- ++在前,先自加,后使用;
- ++在后,先使用,后自加。
赋值运算符
所有的赋值运算符的=左边一定是一个变量
=
将符号右边的值,赋值给左边的变量
+= 将符号**左边的值
和右边的值
进行相加操作,
最后将结果赋值给左边的变量
**
-= 将符号**左边的值
和右边的值
进行相乘操作,
最后将结果赋值给左边的变量 /= 将符号**
左边的值**和**
右边的值**进行相除操作 最后将结果**
赋值给左边的变量
%= 将符号**左边的值
和右边的值
进行取余操作,
最后将结果赋值给左边的变量
*
public class OperatorDemo04 {
public static void main(String[] args) {
int a = 3;
int b = 4;
b += a;// 相当于 b = b + a ;
System.out.println(a); // 3
System.out.println(b); // 4
}
}
/
public class OperatorDemo04 {
public static void main(String[] args) {
int a = 3;
int b = 4;
b += a;// 相当于 b = b + a ;
System.out.println(a); // 3
System.out.println(b); // 4
short s = 3;
// s = s + 4; 代码编译报错,因为将int类型的结果赋值给short类型的变量s时,可能损失精度
s += 4; // 代码没有报错
//因为在得到int类型的结果后,JVM自动完成一步强制类型转换,将int类型强转成short
System.out.println(s);
int j = 1;
j += ++j * j++;//相当于 j = j + (++j * j++);
System.out.println(j);//5
}
}
扩展赋值运算符在将最后的结果赋值给左边的变量前,都做了一步强制类型转换**。**
关系运算符(比较运算符)
< 比较符号左边的数据是否小于右边的数据,如果小于结果是true。
比较符号左边的数据是否大于右边的数据,如果大于结果是true。
<=`比较符号左边的数据是否小于或者等于右边的数据,如果大于结果是false。
=`比较符号左边的数据是否大于或者等于右边的数据,如果小于结果是false。
==`比较符号两边数据是否相等,相等结果是true。
!=`不等于符号 ,如果符号两边的数据不相等,结果是true。
public class OperatorDemo05 {
public static void main(String[] args) {
int a = 3;
int b = 4;
System.out.println(a < b); // true
System.out.println(a > b); // false
System.out.println(a <= b); // true
System.out.println(a >= b); // false
System.out.println(a == b); // false
System.out.println(a != b); // true
}
}
逻辑运算符
&与,且有
false则
false\ 或有
t rue则
true^
异或相同为 false
,不同为true
!非 非
false则
true,非
true则
false&&
双与,短路与 左边为false,则右边就不看
|| 双或,短路或 左边为true,则右边就不看
public class OperatorDemo06 {
public static void main(String[] args) {
int a = 3;
int b = 4;
int c = 5;
// & 与,且;有false则false
System.out.println((a > b) & (a > c)); // false & false
System.out.println((a > b) & (a < c)); // false & false
System.out.println((a < b) & (a > c)); // true & false
System.out.println((a < b) & (a < c)); // true & true
System.out.println("===============");
// | 或;有true则true
System.out.println((a > b) | (a > c)); // false | false
System.out.println((a > b) | (a < c)); // false | false
System.out.println((a < b) | (a > c)); // true | false
System.out.println((a < b) | (a < c)); // true | true
System.out.println("===============");
// ^ 异或;相同为false,不同为true
System.out.println((a > b) ^ (a > c)); // false ^ false
System.out.println((a > b) ^ (a < c)); // false ^ false
System.out.println((a < b) ^ (a > c)); // true ^ false
System.out.println((a < b) ^ (a < c)); // true ^ true
System.out.println("===============");
// ! 非;非false则true,非true则false
System.out.println(!false);
System.out.println(!true);
}
- &&
和
&`**区别:&&
和&
结果一样,&&
有短路效果,左边为false,右边不执行;&
左边无论是什么,右边都会执行。
- **
||
和|
**区别:||
和|
结果一样,||
有短路效果,左边为true,右边不执行;|
左边无论是什么,右边都会执行。