`
0428loveyu
  • 浏览: 30584 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

Java运算符

 
阅读更多

Java语言提供许多操作符。操作符是特殊的符号(symbol),它对一个或者两个、三个的操作数进行运算,然后返回一个结果,最简单的就像我们一年级学到的+ -号。一般地,可以将运算符分为四大类:算数运算符、位运算符、关系运算符、逻辑运算符。下面详细介绍:

内容大概包括:

  1. 赋值运算符
  2. 算数运算符
  3. 位运算符
  4. 关系运算符
  5. 布尔逻辑运算符
  6. 几个特殊运算符
  7. 运算符优先级

1. 赋值运算符

赋值运算符(=)是最常见的了,它将右边的值赋给左边,它的运算优先级是最低的。除了我们最熟悉的=以外,还有复合赋值+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=、>>>=。这些赋值语句优先级一样,都是最低的。可以使用下面形式的赋值语句:

		int x = 10,z;
		int y = z = x + 1;
相当于z = x +1; y = z; 。

i = (j = k +1)/2;也是可以的,相当于 j = k +1; i = j/2; 你可能还经常遇到一种情况,要在测试条件中计算某个值,并且还要保存这个值以便继续使用。如下:

double x;
if ( (x = Math.random()) < 0.5 ) {
    System.out.println(x);
}

2. 算术运算符

算数运算符用于数学运算,其操作数必须是数值类型(包括char类型),不能对boolean进行算数运算。算数运算符如下表所示:


2.1 基本运算

一元加号简单地返回操作数本身的值,一元减号取反。加减乘除需要注意的就是除法,对于整数类型,除法不保留小数部分。+也可以用于字符串连接。求模返回除法操作的余数,可用于整数也可以用于浮点数。

2.2 算数与赋值复合运算(compound operator)

+=运算符先进行加法,然后赋值,比如 a += 2; 相当于 a = a + 2; 其他的完全类似。通用格式如下:

var op= expression; 相当于 var = var + expression;

符合运算除了输入更简单方便外,虚拟机执行复合赋值操作的效率也更高。

2.3 自增与自减

自增运算将操作数加1,自减运算将操作数减1。例如x = x + 1; 除了可以写成 x += 1;以外,还可以更简单地写成x++;类似地x = x-1;可以写成x--。自增和自减都有两种形式,前缀和后缀。对于前缀形式,操作数先自增(自减),然后使用自增(自减)之后的值;后缀则先使用操作数原来的值,然后再自增(自减)。一个简单的例子:

x = 10;

y = ++x; // y = 11;

y = x++ ; // y =10;

看一个复杂一点的:

public class IncrementTest {
  public static void main(String[] args) {
    int i = 0, j;
     
    i = i++;
    System.out.println("i = " + i);
     
    j = i++ + i;
    System.out.println("i = " + i + ", j = " + j);
  }
}

首先,对于i = i++; 首先提取i原来的值(0),然后i自增,此时i=1;到此完成了后缀形式的自增。接着执行赋值语句,此时使用的i是最初提取出来的0,所以将0赋给i,覆盖掉自增后的1.结果i为0;

对于 j = i++ + 1; 首先提取i的初值0,然后自增后i为1.接着运算加法,复制给j,得到j=1;i=1;


3、位运算符

Java中定义了几个位运算符,可以用于byte short char int long。位运算符列在下表中:


可以看到,除了按位取反外,其他都都有赋值复合操作。

Java采用的是two's-complement进行编码。对于负数,采用“取反加1”原则可以得到它的二进制表示。

取反操作很简单,将整数的二进制形式按位取反,0-->1, 1-->0.

按位与、或、异或也都很简单明了,重要的是弄明白整数的二进制表示(bit pattern)。

左移:

将所有为向左移动指定的位数,每次移动,高阶位(最左边)被移出,右边的位用0补充。这可能会导致位的丢失。而对于byte和short,Java在左移之前就自动提升为int,所以如果不超过31位,不会丢失。每次左移相当于乘以2.但是如果将二进制1移进高阶位(31或63),结果会变为负数。

右移:

右移将整数的二进制形式向右移动指定的位数。最左边的位可能会被移出,对于>>右移,高阶位使用右移之前的高阶位填充,这称为符号扩展。每次执行>>相当于除以2并丢掉所有余数,用这种方式实现除法更高效,但是要确保不会将任何位移出右端。

对于>>>,最高位不是采用原来的最高位填充,它总是用0填充,称为无符号右移。

复合类型的位操作符跟算数运算符完全类似,不再说明。

4. 关系运算符

关系运算符包括 ==、!=、>、>=、<、<=。

关系运算的结果是boolean类型。对于Java任何类型(包括基本类型和引用类型),都可以使用==和!=进行相等性测试。其他的四个关系运算法只适用于数值类型(包括char)。

5.布尔逻辑运算符

下表中的布尔逻辑运算符只能对boolean类型的操作数进行操作:


很明了,不需要解释。对于短路与、或。意思是如果第一个布尔值就能确定最终结果,后面的结果就无需再计算。例如,对于逻辑与,如果第一个操作数为false,那么结果肯定为false,无需计算右边的。下面是一个有趣的例子:

if(denom != 0 && num/denom > 10)

如果denom为0,那么第一个表达式为false,后面不需要再计算,所以也就不会出现除数为0的异常。一个类似的例子:

if(car!=null && car.isSomething())

假设其中的isSomething返回布尔类型,这个也保证当car为null的时候不会进行空指针操作。

三元运算符结构为 expression ? expression1 : expression2 其中expression必须为boolean类型,如果它为true,执行expression1,否则expression2.相当于一个if else。


6. 特殊运算符

除了上面的三元运算符比较特殊以外,还有类型转换运算符(),instanceof运算符。

强制类型转换我们已经很熟悉了,instanceof运算符用于判断某个对象是否是某个类型的实例。例如,在实现Comparable接口中的compareTo方法时,经常要使用instanceof,下面是一个实现:

<span style="font-family:Microsoft YaHei;font-size:14px;">public int compareTo(Object o) {
		if (o instanceof Comp) {
			Comp c = (Comp)o;
			// do compare
		}
		return 0;
	}</span>

测试之后进行转换,更能确保类型安全。实现Object的equals方法中也经常用到这个。

()也可以当做一个操作符。


7. 运算优先级

各运算符优先级总结如下表:


说实话很难记住这些顺序,一个好的原则是如果不确定执行顺序的时候,根据需要加上(),可以使得代码更加清晰,降低模糊性。而且使用圆括号不会降低程序性能。

分享到:
评论

相关推荐

    java运算符小程序

    Java运算符是编程语言中用于执行特定操作的关键符号,它们在Java程序中起着至关重要的作用,帮助我们处理数据和控制程序流程。在这个"java运算符小程序"中,我们可以探索和学习Java中的各种运算符及其用法。 1. **...

    java运算符优先级表

    非常详细的java运算符优先级表,帮助记住优先级顺序

    28.java运算符.zip

    28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符...

    Java运算符介绍.pptx.pptx

    Java运算符是编程语言中不可或缺的部分,它们帮助程序员执行各种计算和逻辑判断。在Java中,运算符主要分为四大类:算术运算符、关系运算符、逻辑运算符和位运算符。 1. **算术运算符** - 加法运算符 (+):将两个...

    04-JAVA运算符思维导图

    JAVA运算符思维导图,便捷整理思路,算数运算符、连接运算符、赋值运算符、扩展赋值运算符、三目运算符、逻辑运算符、关系运算符

    javaJava运算符+(优先级、目数)

    Java运算符+(优先级、目数)

    java运算符与优先级

    java运算符与优先级,完善版本。 谢谢,

    Java运算符+(优先级、目数)+.doc

    Java运算符是编程中至关重要的组成部分,它们用于执行各种计算和逻辑操作。了解运算符的优先级和目数对于编写高效、准确的代码至关重要。在Java中,运算符按照其功能分为不同的类别,并且有不同的结合性和目数。 1....

    java运算符大全

    Java运算符是编程语言中用于执行特定计算或操作的符号。了解这些运算符对于编写高效、清晰的Java代码至关重要。以下是对Java运算符及其优先级的详细解释: 1. **点运算符** (.): 用于访问类的成员,如属性和方法。...

    Java运算符优先级

    ### Java运算符优先级详解 在Java编程语言中,了解并正确使用运算符优先级对于构建高效、可读性强的程序至关重要。虽然建议在实际开发过程中通过使用括号来明确表达式的计算顺序,而非依赖于复杂的优先级规则,但...

    Java运算符的使用

    Java运算符是编程中不可或缺的部分,它们用于执行各种计算和逻辑操作。Java提供了四大类运算符:算术运算符、位运算符、关系运算符和逻辑运算符。 1. **算术运算符**: - `+`:加法运算,可用于整数、浮点数的相加...

    java 运算符学习笔记 java 运算符学习笔记

    java 运算符学习笔记

    JAVA 运算符的基本了解与使用

    Java 运算符可以分为以下几类:算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、三元运算符等。 1. 算术运算符 算术运算符是最基本的运算符,包括加法 (+)、减法 (-)、乘法 (*)、除法 (/)、取余 (% )...

    java运算符优先级.doc

    Java 运算符优先级和异常处理 Java 是一种面向对象的编程语言,它提供了丰富的运算符和异常处理机制,以帮助开发者更好地编写程序。在本文中,我们将详细介绍 Java 运算符的优先级和常见的异常类型,以及它们的解决...

    Java 运算符 动力节点Java学院整理

    Java运算符是编程语言中不可或缺的部分,它们用于执行各种计算、比较和逻辑操作。在Java中,运算符主要分为四大类:算数运算符、关系运算符、逻辑运算符和位运算符。 **算数运算符** 包括加(+), 减(-), 乘(*), 除(/...

    JAVA运算符.pdf

    JAVA运算符是Java编程语言中用于执行各种计算的特殊符号和字符。运算符可以是单一的符号,如加号(+),也可以是关键字,如`instanceof`。Java语言支持多种类型的运算符,主要可以分为以下几类: 1. 算术运算符:...

    java运算符优先级[整理].pdf

    Java 运算符优先级 Java 运算符优先级是指 Java 语言中各种运算符的执行优先级顺序。正确理解运算符优先级对于编写正确的 Java 程序至关重要。 以下是 Java 运算符优先级的详细说明: 1. 点运算符(.) 点运算符...

    java运算符流程控制数组基础题目

    在Java编程语言中,运算符、流程控制和数组是核心概念,它们构成了程序的基本结构。...通过解决相关的题目,开发者可以更好地掌握Java运算符、流程控制和数组的使用,从而编写出更高效、更清晰的代码。

Global site tag (gtag.js) - Google Analytics