Java 中的运算符
Java 提供了多种类型的运算符,可以根据需要使用。它们根据提供的功能进行分类。有些类型是-
让我们详细看看它们。
- 算术运算符:用于对原始数据类型进行简单的算术运算。
- *:乘法
- / : 分部
- % : 模块
- + : 加法
- –:减法
- 一元运算符:一元运算符只需要一个操作数。它们用于增加、减少或否定一个值。
- –:一元减,用于否定数值。
- +:一元加,表示正值(但是,没有这个数字是正数)。当操作数的类型为字节、字符或短整型时,它会自动转换为 int。这被称为一元数值提升。
- ++:递增运算符,用于将数值递增 1。增量运算符有两种。
- 后递增:值首先用于计算结果,然后递增。
- 预增量:值首先递增,然后计算结果。
- —:递减运算符,用于将数值递减 1。减量运算符有两种。
- 后递减:值首先用于计算结果,然后递减。
- 预递减:值先递减,然后计算结果。
- !:逻辑非运算符,用于反转布尔值。
- 赋值运算符:“=”赋值运算符用于给任何变量赋值。它具有从右到左的关联性,即运算符右侧给出的值被赋给左侧的变量,因此右侧的值必须在使用之前声明,或者应该是常数。 赋值运算符的一般格式是,
variable = value;
- 在许多情况下,赋值运算符可以与其他运算符组合在一起,构建一个名为复合语句的较短版本的语句。例如,我们可以写一个 += 5,而不是一个 = a+5。
- += ,用于将左操作数和右操作数相加,然后分配给左边的变量。
- -= ,用于用右操作数减去左操作数,然后分配给左边的变量。
- *= ,用于将左操作数乘以右操作数,然后分配给左边的变量。
- /= ,用于左操作数除以右操作数,然后分配给左边的变量。
- %= ,用于将左操作数的模赋给右操作数,然后赋给左边的变量。
- 关系运算符:这些运算符用于检查等式、大于、小于等关系。它们在比较后返回布尔结果,广泛用于循环语句和条件 if else 语句。一般格式是,
variable relation_operator value
- 一些关系运算符是-
- ==,等于:如果左手边等于右手边,则返回真。
- !=,不等于:如果左侧不等于右侧,则返回真。
- <,小于:如果左手边小于右手边则返回真。
- < =,小于或等于:如果左手边小于或等于右手边,则返回 true。
- >,大于:如果左手边大于右手边,则返回真。
- > =,大于或等于:如果左手边大于或等于右手边,则返回真。
- 逻辑运算器:这些运算器用于执行“逻辑与”和“逻辑或”运算,即数字电子中类似于与门和或门的功能。需要记住的一点是,如果第一个条件为假,则不评估第二个条件,即它具有短路效应。广泛用于测试做决定的几个条件。
条件运算符是-
- & &,逻辑与:当两个条件都为真时返回真。
- ||,逻辑或:如果至少有一个条件为真,则返回真。
- 三元运算符:三元运算符是 if-else 语句的简写版本。它有三个操作数,因此得名三元。一般格式是-
condition ? if true : if false
上面的语句意味着,如果条件评估为真,则执行“?”后面的语句否则执行“:”后面的语句。
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to illustrate
// max of three numbers using
// ternary operator.
public class operators {
public static void main(String[] args)
{
int a = 20, b = 10, c = 30, result;
// result holds max of three
// numbers
result = ((a > b)
? (a > c)
? a
: c
: (b > c)
? b
: c);
System.out.println("Max of three numbers = "
+ result);
}
}
Output:
Max of three numbers = 30
- 按位运算符:这些运算符用于对一个数字的各个位进行操作。它们可以用于任何整数类型。它们在执行二进制索引树的更新和查询操作时使用。
- &,按位与运算符:逐位返回输入值的与。
- |,按位或运算符:逐位返回输入值的或。
- ^,按位 XOR 运算符:返回输入值的逐位 XOR。
- ~,按位补码运算符:这是一个一元运算符,它返回输入值的补码表示,即所有位反转。
- 移位运算符:这些运算符用于向左或向右移位一个数的位,从而分别将该数乘以或除以 2。当我们必须将一个数乘以或除以 2 时,它们可以被使用。通用格式-
number shift_op number_of_places_to_shift;
- 运算符实例 : 运算符实例用于类型检查。它可以用来测试对象是类、子类还是接口的实例。通用格式-
object instance of class/subclass/interface
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to illustrate
// instance of operator
class operators {
public static void main(String[] args)
{
Person obj1 = new Person();
Person obj2 = new Boy();
// As obj is of type person, it is not an
// instance of Boy or interface
System.out.println("obj1 instanceof Person: "
+ (obj1 instanceof Person));
System.out.println("obj1 instanceof Boy: "
+ (obj1 instanceof Boy));
System.out.println("obj1 instanceof MyInterface: "
+ (obj1 instanceof MyInterface));
// Since obj2 is of type boy,
// whose parent class is person
// and it implements the interface Myinterface
// it is instance of all of these classes
System.out.println("obj2 instanceof Person: "
+ (obj2 instanceof Person));
System.out.println("obj2 instanceof Boy: "
+ (obj2 instanceof Boy));
System.out.println("obj2 instanceof MyInterface: "
+ (obj2 instanceof MyInterface));
}
}
class Person {
}
class Boy extends Person implements MyInterface {
}
interface MyInterface {
}
Output:
obj1 instanceof Person: true
obj1 instanceof Boy: false
obj1 instanceof MyInterface: false
obj2 instanceof Person: true
obj2 instanceof Boy: true
obj2 instanceof MyInterface: true
运算符的优先级和结合性
当处理包含一种以上运算符的混合方程时,使用优先和关联规则。在这种情况下,这些规则决定了首先考虑等式的哪一部分,因为同一等式可能有许多不同的估值。下表按大小顺序描述了运算符的优先级,顶部表示最高优先级,底部表示最低优先级。
操作员的有趣问题
- 优先性和结合性:说到混合方程,也就是有多个算符的方程,经常会出现混淆。问题是先解决哪个部分。在这些情况下,有一个黄金法则可以遵循。如果运算符具有不同的优先级,请先解决较高的优先级。如果它们具有相同的优先级,则根据结合律求解,即从右向左或从左向右。以下程序的解释在程序本身的注释中写得很好。
Java 语言(一种计算机语言,尤用于创建网站)
public class operators {
public static void main(String[] args)
{
int a = 20, b = 10, c = 0, d = 20, e = 40, f = 30;
// precedence rules for arithmetic operators.
// (* = / = %) > (+ = -)
// prints a+(b/d)
System.out.println("a+b/d = " + (a + b / d));
// if same precendence then associative
// rules are followed.
// e/f -> b*d -> a+(b*d) -> a+(b*d)-(e/f)
System.out.println("a+b*d-e/f = "
+ (a + b * d - e / f));
}
}
Output:
a+b/d = 20
a+b*d-e/f = 219
- 做一个编译器:我们系统中的编译器在生成令牌的时候使用 lex 工具来匹配最大匹配。如果忽视这一点,就会产生一些问题。例如,考虑语句a = b+++c;,对于许多读者来说,这可能会产生编译器错误。但是这个语句是绝对正确的,因为 lex 创建的 token 是 a,=,b,++,+,c,因此这个语句有一个类似的效果,先给 a 赋值 b+c,然后递增 b,类似的,a = b++ +++ c;会产生错误,因为生成的标记是 a,=,b,++,++,++,c,这实际上是一个错误,因为在第二个一元操作数之后没有操作数。
Java 语言(一种计算机语言,尤用于创建网站)
public class operators {
public static void main(String[] args)
{
int a = 20, b = 10, c = 0;
// a=b+++c is compiled as
// b++ +c
// a=b+c then b=b+1
a = b++ + c;
System.out.println("Value of a(b+c), "
+ " b(b+1), c = "
+ a + ", " + b
+ ", " + c);
// a=b+++++c is compiled as
// b++ ++ +c
// which gives error.
// a=b+++++c;
// System.out.println(b+++++c);
}
}
Output:
Value of a(b+c), b(b+1), c = 10, 11, 0
- 使用+ over (): 在 system.out.println()内部使用+运算符时,请确保使用括号进行加法。如果我们在做加法之前写一些东西,那么就会发生字符串加法,也就是说加法的结合性是从左到右的,因此整数被添加到字符串中,首先产生一个字符串,当使用+时字符串对象被连接起来,因此它会产生不需要的结果。
Java 语言(一种计算机语言,尤用于创建网站)
public class operators {
public static void main(String[] args)
{
int x = 5, y = 8;
// concatenates x and y as
// first x is added to "concatenation (x+y) = "
// producing "concatenation (x+y) = 5"
// and then 8 is further concatenated.
System.out.println("Concatenation (x+y)= "
+ x + y);
// addition of x and y
System.out.println("Addition (x+y) = "
+ (x + y));
}
}
Output:
Concatenation (x+y)= 58
Addition (x+y) = 13
参考文献: 官方 Java 文档 本文由里沙布·马尔塞供稿。如果你喜欢 GeeksforGeeks 并想投稿,你也可以使用write.geeksforgeeks.org写一篇文章或者把你的文章邮寄到 review-team@geeksforgeeks.org。看到你的文章出现在极客博客主页上,帮助其他极客。 如果发现有不正确的地方,或者想分享更多关于上述话题的信息,请写评论。
版权属于:月萌API www.moonapi.com,转载请注明出处