从初学者到专家:Java运算符的完整指南

目录

1.算数运算符

2.增量运算符 

2.1自增/自减运算符

4. 逻辑运算符

5.位运算符

6.移位运算符  

 7. 条件运算符



导言:
Java作为一门广泛使用的编程语言,其运算符是编写代码时必不可少的一部分。本篇博客将为你详细介绍Java中的各种运算符,从基础的算术运算符到高级的位运算符和三元运算符,为你打开运算符的奥秘之门。我们将通过代码示例和简单例子来帮助你更好地理解和应用这些运算符。

1.算数运算符

基本四则运算符:算术运算符用于执行基本的数学运算,包括加法、减法、乘法、除法、取模等。下面是一些常见的算术运算符及其用法:
int a = 10;
int b = 5;

int sum = a + b;        // 加法运算
int difference = a - b; // 减法运算
int product = a * b;    // 乘法运算
int quotient = a / b;   // 除法运算
int remainder = a % b;  // 取余运算

注意事项:

1.都是二元运算符,使用时必须要有左右两个操作数

int a = 10;
int b = 5;

int sum = a + b;        // 加法运算
int difference = a - b; // 减法运算
int product = a * b;    // 乘法运算
int quotient = a / b;   // 除法运算
int remainder = a % b;  // 取余运算

2.int / int 结果还是int类型,而且会向下取整

inta=3;
intb=2;
//在数学中应该是1.5但是在Java中输出结果为1会向下取整,即小数点之后全部舍弃掉了System.out.println(a/b);

//如果要得到数学中的结果,可以使用如下方式
doubled=a*1.0/b;   //只要相乘数有一位数字是小数,结果就为小数
System.out.println(d);

3.做除法和取模时,右操作数不能为0

int a = 1;
int b = 0;
System.out.println(a / b)
// 运行结果
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Test.main(Test.java:5)

4.% 不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的

System.out.println(11.5 % 2.0);
// 运行结果
1.5

5.两侧操作数类型不一致时,向类型大的提升

System.out.println(1+0.2);
//+的左侧是int,右侧是double,在加之前int被提升为double型
//故输出1.2

2.增量运算符 

该种类型运算符操作完成后,会将 操纵的结果赋值给左操作数。
具体示例如下:
int a = 1;
a += 2; // 相当于 a = a + 2
System.out.println(a); // 输出3

a -= 1; // 相当于 a = a - 1
System.out.println(a); // 输出2

a *= 3; // 相当于 a = a * 3
System.out.println(a); // 输出6

a /= 3; // 相当于 a = a / 3

System.out.println(a); // 输出2

a %= 3; // 相当于 a = a % 2
System.out.println(a); // 输出2

注意:只有变量才能使用该运算符,常量不能使用。

2.1自增/自减运算符

递增运算符有两种形式:前缀递增和后缀递增。 前缀递增运算符(++x) 将先将变量的值增加1,然后返回增加后的值。 后缀递增运算符(x++) 将返回变量的原始值,然后再将其增加1。递减运算符也有类似的前缀和后缀形式。
具体例子如下:
int x = 5;

// 前缀递增
int y = ++x;
// y的值为6,x的值也为6

// 后缀递增
int z = x++;
// z的值为6,x的值变为7

// 前缀递减
int a = --x;
// a的值为6,x的值变为6

// 后缀递减
int b = x--;
// b的值为6,x的值变为5

增量运算符在编程中常用于循环、条件语句和其他需要对变量进行递增或递减的场景。它们提供了一种简洁和方便的方式来更新变量的值。

3. 关系运算符

关系运算符用于比较两个值之间的关系,并返回一个布尔值(true或false)。下面是一些常见的关系运算符及其用法:

int a = 10;
int b = 5;

boolean isEqual = a == b;      // 相等运算
boolean isNotEqual = a != b;   // 不相等运算
boolean isGreater = a > b;     // 大于运算
boolean isLess = a < b;        // 小于运算
boolean isGreaterOrEqual = a >= b; // 大于等于运算
boolean isLessOrEqual = a <= b;    // 小于等于运算

注意:当需要多次判断时,不能连着写,比如:3 < a < 5,Java程序与数学中是有区别的。

4. 逻辑运算符

当需要在条件语句或布尔表达式中进行逻辑判断时,通过逻辑运算符来操作布尔值(true或false)。

1.逻辑与运算符(&&)
逻辑与运算符表示两个条件都必须为true时,整个表达式才为true。如果任意一个条件为false,则整个表达式为false。

boolean a = true;
boolean b = false;
boolean result = a && b;  // 结果为false,因为b为false

逻辑或运算符(||)
逻辑或运算符表示两个条件中至少一个为true时,整个表达式就为true。只有两个条件都为false时,整个表达式才为false。

boolean a = true;
boolean b = false;
boolean result = a || b;  // 结果为true,因为a为true

逻辑非运算符(!)
逻辑非运算符用于取反操作,将true变为false,将false变为true。

boolean a = true;
boolean result = !a;  // 结果为false,因为a为true

短路求值

逻辑与运算符(&&)和逻辑或运算符(||)都具有短路求值的特性。短路求值指的是当根据第一个条件的结果可以确定整个表达式的结果时,将不再计算第二个条件。

注意两点:

  1. 对于逻辑与运算符(&&),如果第一个条件为false,则整个表达式一定为false,不会执行第二个条件的计算。
  2. 对于逻辑或运算符(||),如果第一个条件为true,则整个表达式一定为true,不会执行第二个条件的计算。

boolean a = true;
boolean b = false;
boolean result = a || (b && someOtherCondition);  // 如果a为true,则整个表达式为true,不会计算第二个条件

作用:短路求值可以提高程序的性能,并且在某些情况下避免不必要的计算。逻辑运算符在控制流语句、条件语句和布尔表达式中起着重要的作用。它们允许我们进行复杂的逻辑判断和条件组合,从而控制程序的行为。了解逻辑运算符的含义和用法对于编写正确和可读性强的代码至关重要。

5.位运算符

按位与 &: 如果两个二进制对应位都是 1, 则结果为 1, 否则结果为 0 。

12 & 5

12:  00001100
5:   00000101
-------------
     00000100
结果: 00000100 (4)

按位或(|): 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1

12 | 5

12:  00001100
5:   00000101
--------------
     00001101
结果: 00001101 (13)

注意 :
当 & | 的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为 boolean 的时候, 表 示逻辑运算.

按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
~12

12:  00001100
------------
结果: 11110011 (-13)

注意事项:

1. 0x 前缀的数字为 十六进制 数字. 十六进制可以看成是二进制的简化表示方式. 一个十六进制数字对应 4 个二进制位。
2. 0xf 表示 10 进制的 15, 也就是二进制的 1111。
3.printf 能够格式化输出内容, %x 表示按照十六进制输出
4.\n 表示换行符

 按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1

12 ^ 5

12:  00001100
5:   00000101
--------------
     00001001
结果: 00001001 (9)

注意:如果两个数相同,则异或的结果为0 


6.移位运算符  

移位运算符有三个 : << , >>, >>> ,都是二元运算符,且都是按照二进制比特位来运算的。

 1. 左移 <<: 最左侧位不要了, 最右侧补 0.

12 << 2

12:  00001100
------------
结果: 00110000 (48)

2. 右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0,负数补1) 

12 >> 2

12:  00001100
------------
结果: 00000011 (3)

3.无符号右移 >>>: 最右侧位不要了, 最左侧补 0.  

-12 >>> 2

-12:  11110011
------------
结果: 00111100 (60)
注意:
1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
4. 移动负数位或者移位位数过大都没有意义.

 7. 条件运算符

条件运算符只有一个 : 三目运算符

结构为:条件 ? 结果1 : 结果2

如果条件为true,那么整个表达式的结果就是结果1;如果条件为false,则结果就是结果2。

可以将条件运算符理解为一个问答游戏。条件是一个问题,如果回答为true,我们就选择结果1作为答案;如果回答为false,我们就选择结果2作为答案。

这是一个具体的例子:
 

int age = 20;
String message = (age >= 18) ? "成年人" : "未成年人";

在上面的例子中,我们根据年龄的条件判断选择不同的信息。如果年龄大于或等于18岁,我们选择"成年人"作为信息;否则,我们选择"未成年人"作为信息。

好的,内容就到这里,如果以上有错误的地方恳请在评论区指出,如果我帮助到你,希望你也可以三连支持一下,谢谢。堆糖同学会很赞同的。

猜你喜欢

转载自blog.csdn.net/LHY537200/article/details/132131419