运算符
1 简介
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
在Java中,运算符是一种用于执行基本操作的特殊符号。通过使用运算符,我们可以对变量和常量进行基本的数学、逻辑和关系操作。Java中的运算符可以分为以下几类:
- 算术运算符:用于执行基本的数学运算,例如加法、减法、乘法和除法等。常见的算术运算符包括
+
、-
、*
、/
、%
(取模)等。 - 关系运算符:用于比较两个值之间的关系,例如大于、小于、等于和不等于等。常见的关系运算符包括
>
、<
、>=
、<=
、==
和!=
等。 - 逻辑运算符:用于执行基本的逻辑操作,例如与、或和非等。常见的逻辑运算符包括
&&
(逻辑与)、||
(逻辑或)和!
(逻辑非)等。 - 位运算符:用于对整数进行按位操作,例如按位与、按位或和按位异或等。常见的位运算符包括
&
(按位与)、|
(按位或)、^
(按位异或)和~
(按位取反)等。 - 赋值运算符:用于给变量赋值,并且可以与其他运算符结合使用。常见的赋值运算符包括
=
、+=
、-=
、*=
和/=
等。 - 其他运算符:Java中还有一些其他类型的运算符,例如条件运算符(
? :
)和 instanceof运算符等。
通过使用这些运算符,我们可以对变量和常量进行各种各样的操作,并且可以通过运算符优先级和结合性来确定运算符的执行顺序。需要注意的是,在进行运算时,需要保证操作数的数据类型一致,否则需要进行类型转换。
总之,在Java中,运算符是程序员处理数据和执行基本操作的重要工具。了解各种运算符的概念和使用方法,可以帮助我们更加高效地编写程序。
- 算术运算符
- 赋值运算符
- 比较运算符(关系运算符)
- 逻辑运算符
- 位运算符
- 三元运算符
2 算术运算符
算术运算符 | 解释 |
---|---|
+ | 加法运算,字符串连接运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算 |
% | 取模运算,两个数字相除取余数 |
++、-- | 自增自减运算 |
基本运算
- 算数运算符练习:
public class Demo05 {
public static void main(String[] args) {
// 定义变量
int a = 5;
int b = 3;
System.out.println(a + b); //8
System.out.println(a - b); //2
System.out.println(a * b); //15
System.out.println(a / b); //1
System.out.println(a % b); //2
System.out.println("------------");
//整数相除,结果是整数,要得到小数,必须有小数参与运算(提升为double类型)
System.out.println(5.0 / 3); //1.6666666666666667
System.out.println(5 / 3.0); //1.6666666666666667
}
}
%取余注意事项:
public class Demo06 {
public static void main(String[] args) {
System.out.println(5 % 3);
System.out.println(-5 % 3);
System.out.println(5 % -3);
System.out.println(-5 % -3);
}
}
tips:取余结果符号与左边符号相同
++和–
++ 运算,变量自己增长1。反之, – 运算,变量自己减少1,用法与 ++ 一致。
-
独立运算:
- 变量在独立运算时, 前++ 和 后++ 没有区别 。
- 变量 前++ :例如 ++i 。
- 变量 后++ :例如 i++ 。
-
混合运算:
- 和其他变量放在一起, 前++ 和 后++ 就产生了不同。
变量 前++
:变量a自己加1,将加1后的结果赋值给b,也就是说a先计算。a和b的结果都是2。
public class Demo07 {
public static void main(String[] args) {
int a = 1;
int b = ++a; //先++,后赋值
System.out.println(a); //2
System.out.println(b); //2
}
}
变量 后++
:变量a先把自己的值1,赋值给变量b,此时变量b的值就是1,变量a自己再加1。a的结果是2,b的结果是1。
public class Demo08 {
public static void main(String[] args) {
int a = 1;
int b = a++; //先赋值,后++
System.out.println(a); //2
System.out.println(b); //1
}
}
自增自减小练习
public class Demo09 {
public static void main(String[] args) {
int a = 10;
int b = 10;
int c = 10;
a = b++;
c = --a;
b = ++a;
a = c--;
System.out.println(a); //?
System.out.println(b); //?
System.out.println(c); //?
}
}
+=运算
public class Demo {
public static void main(String[] args) {
short s = 1;
s += 1;
System.out.println(s);
}
}
s += 1 逻辑上看作是 s = s + 1;计算结果被提升为int类型再向short类型赋值时发生错误,因为不能将取值范围大的类型赋值到取值范围小的类型,但是, s=s+1进行两次运算 , += 是一个运算符,只运算一次,并带有强制转换的特点,也就是说 s += 1 就是 s = (short)(s + 1) ,因此程序没有问题编译通过,运行结果是2;
但如果是s=s+1;那么就会出现编译保存,需要强制转换;
字符串注意事项
符号在遇到字符串的时候,表示连接、拼接的含义。“a”+"b"的结果是“ab”,连接含义
public class Demo10 {
public static void main(String[] args) {
// +遇到字符串表示连接
System.out.println("df" + "bz"); //"dfbz"
System.out.println("dfbz" + 10); //"dfbz10"
//1. "dfbz"+5="dfbz5"; 2. "dfbz5"+5="dfbz"
System.out.println("dfbz" + 5 + 5);
System.out.println("dfbz" + (5 + 5)); //1. 5+5=10; 2. 10+"dfbz"="10dfbz"
System.out.println(5 + 5 + "dfbz"); //1. 5+5=10; 2. 10+"dfbz"="10dfbz"
System.out.println("1+1="+1+1);
}
}
思考?
System.out.println("1+1="+1+1);
常量和变量的运算
思考?下面的程序有问题吗?
public class Demo {
public static void main(String[] args) {
byte b1 = 1;
byte b2 = 2;
byte b3 = 1 + 2;
byte b4 = b1 + b2;
}
}
分析: b3 = 1 + 2 , 1 和 2 是常量,为固定不变的数据,在编译的时候(编译器javac),已经确定了 1+2 的结果并没有超过byte类型的取值范围,可以赋值给变量 b3 ,因此b3=1 + 2是正确的。反之, b4 = b2 + b3 , b2 和 b3 是变量,变量的值是可能变化的,在编译的时候,编译器javac不确定b2+b3的结果是什么,因此会将结果以int类型进行处理,所以int类型不能赋值给byte类型,因此编译失败。
3、算术运算符的优先级
当一个表达式中含有多个算术运算符时就会出现运算的先后顺序,
java中算术运算符的先后顺序为:【++ or - -】 > 【* or / or %】 > 【+ or -】,
举例:
System.out.println(3 + 4 * 5 % 6 / 2);//相当于(((4 * 5) % 6 )/ 2) + 3 = 4
//字符串的 + 操作
System.out.println(3+'A'+"string");//先进行3+'A'操作然后再进行字符串的连接
System.out.println("string"+3+'A');//直接进行字符串的连接
控制台输出结果:
4
68string
string3A