Java中的运算符

Java提供了许多类型的操作符,可以根据需要使用它们。它们根据其提供的功能进行分类。其中一些类型包括:

null
  1. 算术运算符
  2. 单目运算符
  3. 赋值运算符
  4. 关系运算符
  5. 逻辑运算符
  6. 三元运算符
  7. 位运算符
  8. 值班员
  9. 运算符实例

让我们详细看一下。

1.算术运算符: 它们用于对基本数据类型执行简单的算术运算。

  • * : 乘法
  • / : 分开
  • % :
  • + : 附加
  • – : 扣除

2.一元运算符: 一元运算符只需要一个操作数。它们用于增加、减少或抵消一个值。

  • – : 一元负号 ,用于对值求反。
  • + : 一元加号 指示正值(但是,如果没有该值,则数字为正值)。当操作数的类型为字节、字符或短字符时,它会自动转换为int。这被称为一元数字提升。
  • ++ : 增量运算符 ,用于将值递增1。增量运算符有两种。
    • 增薪后: 值首先用于计算结果,然后递增。
    • 增量前: 值先递增,然后计算结果。
  • -:减量运算符 ,用于将值递减1。减量运算符有两种。
    • 减量后: 值首先用于计算结果,然后递减。
    • 预减量: 值先递减,然后计算结果。
  • ! : 逻辑not运算符 ,用于反转布尔值。

3.赋值运算符:’=’ 赋值运算符用于为任何变量赋值。它具有从右到左的关联性,即运算符右侧给定的值被分配给左侧的变量,因此在使用它之前必须声明右侧值,或者应该是常量。

赋值运算符的一般格式为:

variable = value;

在许多情况下,赋值运算符可以与其他运算符组合,以生成名为 复合语句 .例如,而不是 = a+5,我们可以写一个 += 5.

  • += ,用于将左操作数与右操作数相加,然后将其赋给左侧的变量。
  • -= ,用于从左操作数中减去右操作数,然后将其赋给左边的变量。
  • *= ,用于将左操作数与右操作数相乘,然后将其赋给左侧的变量。
  • /= ,用于将左操作数除以右操作数,然后将其赋给左侧的变量。
  • %= ,用于按右操作数分配左操作数的模,然后将其分配给左侧的变量。

4.关系运算符: 这些运算符用于检查等式、大于、小于等关系。它们在比较后返回布尔结果,广泛用于循环语句以及条件if-else语句。一般的格式是,

variable relation_operator value
  • 一些关系运算符是-
    • ==,等于: 如果左侧等于右侧,则返回true。
    • !=, 不等于: 如果左侧与右侧不相等,则返回true。
    • 如果左侧小于右侧,则返回true。
    • <=,小于或等于 如果左侧小于或等于右侧,则返回true。
    • >,大于: 如果左侧大于右侧,则返回true。
    • >=,大于或等于: 如果左侧大于或等于右侧,则返回true。

5.逻辑运算符: 这些运算符用于执行“逻辑与”和“逻辑或”操作,即与数字电子中的“与门”和“或门”类似的功能。需要记住的一点是,如果第一个条件为假,即具有短路效应,则不评估第二个条件。广泛用于测试做出决定的几种条件。

条件运算符包括:

  • &&,逻辑和: 当两个条件都为真时,返回真。
  • ||,逻辑或: 如果至少有一个条件为真,则返回真。
  • 三元运算符: 三元运算符是if-else语句的简写版本。它有三个操作数,因此得名三元。

一般格式为:

condition ? if true : if false

上面的语句意味着,如果条件的计算结果为true,则执行“?”后面的语句否则执行“:.”后面的语句

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);
}
}


输出

Max of three numbers = 30

6.位运算符: 这些运算符用于对数字的各个位进行操作。它们可以与任何整数类型一起使用。它们用于执行二进制索引树的更新和查询操作。

  • &,按位AND运算符: 逐位返回输入值的大小。
  • |,按位OR运算符: 逐位返回或返回输入值。
  • ^,按位异或运算符: 返回输入值的逐位异或。
  • ~,位补运算符: 这是一个一元运算符,返回输入值的补码表示形式,即所有位都反转。

7.值班人员: 这些运算符用于将数字的位向左或向右移位,从而将数字分别乘以或除以2。当我们必须将一个数字乘以或除以二时,可以使用它们。通用格式-

 number shift_op number_of_places_to_shift;
  • < 将数字的位向左移动,并在左侧的空白处填充0。类似于将数字乘以二的幂的效果。
  • >>,署名右班操作员: 将数字的位向右移动,并在左侧的空白处填充0。最左边的位取决于初始数字的符号。类似于用二的幂除数字的效果。
  • >>>,无符号右移运算符: 将数字的位向右移动,并在左侧的空白处填充0。最左边的位设置为0。

8.运算符实例: 运算符的实例用于类型检查。它可以用来测试对象是类、子类还是接口的实例。通用格式-

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 {
}


输出

obj1 instanceof Person: trueobj1 instanceof Boy: falseobj1 instanceof MyInterface: falseobj2 instanceof Person: trueobj2 instanceof Boy: trueobj2 instanceof MyInterface: true

算子的优先性和结合性

在处理涉及多种运算符的混合方程时,会使用优先级和关联规则。在这种情况下,这些规则首先确定要考虑的方程的哪一部分,因为对于同一方程可以有许多不同的估值。下表以数量级的降序描述运算符的优先级,顶部表示最高优先级,底部表示最低优先级。

Precedence and Associativity of Operators in Java

关于运算符的有趣问题

1.优先级和关联性: 当涉及到混合方程时,通常会出现混淆,即具有多个算子的方程。问题是先解决哪一部分。在这些情况下,有一条黄金法则可以遵循。如果运算符的优先级不同,请先求解优先级较高的运算符。如果它们具有相同的优先级,则根据关联性进行求解,即从右向左或从左向右。以下程序的解释在程序本身的注释中写得很好。

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));
}
}


输出

a+b/d = 20a+b*d-e/f = 219

2.成为一名编译器: 我们系统中的编译器在生成令牌时使用lex工具来匹配最大匹配。如果忽视了这一点,就会产生一些问题。例如,考虑语句 a=b++c ; 如果读者太多,这可能会导致编译器错误。但是这个语句是绝对正确的,因为lex创建的标记是a,=,b,+,+,c。因此,这个语句具有类似的效果,首先将b+c赋值给a,然后增加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);
}
}


输出

Value of a(b+c),  b(b+1), c = 10, 11, 0

3.使用+over(): 在内部使用+运算符时 系统出来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));
}
}


输出

Concatenation (x+y)= 58Addition (x+y) = 13

本文由 Rishabh Mahrsee .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享