|
操作 |
优先级 |
结合性 |
1 |
后缀运算符 |
[ ] . ( ) (函数呼叫) |
从左到右 |
2 |
单目运算符 |
! ~ ++ -- +(单操作数) –(单操作数) |
从右到左 |
3 |
创建 |
new |
从左到右 |
4 |
乘除 |
* / % |
从左到右 |
5 |
加减 |
+ - |
从左到右 |
6 |
移位 |
<< >> >>> |
从左到右 |
7 |
关系 |
< <= > >= instanceof |
从左到右 |
8 |
相等 |
== != |
从左到右 |
9 |
按位与 |
& |
从左到右 |
10 |
按位异或 |
^ |
从左到右 |
11 |
按位或 |
| |
从左到右 |
12 |
逻辑与 |
&& |
从左到右 |
13 |
逻辑或 |
|| |
从左到右 |
14 |
条件 |
? : |
从右到左 |
15 |
赋值 |
= += -= *= /= %= ^= <<= >>= >>>= |
从右到左 |
几乎所有运算符都只能操作“主类型”(Primitives)。例外是“=”、“= =”和“! =”,它们能操作所有对象。除此以外,String类支持“+”和“+=”。
(1)赋值
主类型使用“A=B”,那么B处的内容就复制到A。若修改A,那么B根本不会受修改的影响。
对象“赋值”的时候情况发生了变化。对一个对象进行操作时,我们真正操作的是它的句柄。所以倘若“从一个对象到另一个对象”赋值,实际就是将句柄从一个地方复制到另一个地方。这意味着假若为对象使用“C=D”,那么C和D最终都会指向最初只有D才指向的那个对象。
short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)
short s1 = 1; s1 += 1;(可以正确编译) +=运算符无类型转换问题
(2)算术运算符
Java的算术运算符:加号(+)、减号(-)、除号(/)、乘号(*)以及模数(%,从整数除法中获得余数)。整数除法会直接砍掉小数,而不是进位。
(3)自动递增、递减
对于前递增和前递减(如++A或--A),会先执行运算,再生成值。
对于后递增和后递减(如A++或A--),会先生成值,再执行运算。
(4)关系运算符
关系运算符包括<、>、<=、>=、= =、!=
等于和不等于适用于所有内建的数据类型,但其他比较不适用于boolean类型。
想对比两个对象的实际内容是否相同,必须使用所有对象都适用的特殊方法equals()。
equals()方法不适用于“主类型”,那些类型直接使用= =和!=即可。
equals()的默认是比较句柄。所以除非在自己的新类中改变了equals(),否则不可能表现出我们希望的行为
大多数Java类库都实现了equals(),所以它实际比较的是对象的内容,而非它们的句柄
= =和! =比较的是对象句柄,而不是对象的实际内容
(5)逻辑运算符
逻辑运算符&&、||、!能生成一个布尔值
&和&&都可作为逻辑运算符“与”使用,但是&&是“短路与”,运算时先判断符号前面的表达式的值,如果能够确定整个表达式的值,则不进行符号后面的表达式的运算。
另外,&可作为位运算符使用
(6)按位运算符
按位AND运算符(&)
按位OR运算符(|)
按位XOR(^,异或)
按位NOT(~,也叫作“非”运算符)属于一元运算符,生成与输入位的相反的值
(7)移位运算符
左移位运算符(<<)能将运算对象向左移动运算符右侧指定的位数(在低位补0)。
有符号右移位运算符(>>)将运算对象向右移动运算符右侧指定的位数。有符号右移位运算符使用了符号扩展:若值为正,则在高位插入0;若值为负,则在高位插入1
无符号右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0
(8)三元IF-ELSE运算符
布尔表达式 ? 值0:值1 “布尔表达式”的结果为true,就计算“值0”,否则计算“值1”
(9)字符串运算符+
int x = 0, y = 1, z = 2;
System.out.println(“out:” + x + y + z);
在这里,Java编译程序会将x,y和z转换成它们的字串形式,而不是先把它们加到一起
运用“String +”时,若表达式以一个String起头,那么后续所有运算对象都会转换到字串。
想通过“加号”连接字串(使用Java的早期版本),请务必保证第一个元素是字串
(10)造型(Cast)运算符
对于“缩小转换”(Narrowing Conversion)的操作(能容纳更多信息的数据类型,将其转换成容量较小的类型,例如int转short),此时就可能面临信息丢失的危险。此时,编译器会强迫我们进行明确造型
对于“放大转换”(Widening conversion),则不必进行明确造型,因为新类型肯定能容纳原来类型的信息,不会造成任何信息的丢失
布尔值(bollean)根本不允许进行任何造型处理,其它任何主类型可互相造型
将float或double值造型成整数值后,总是将小数部分“砍掉”,不作任何进位处理
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)==12 Math.round(-11.5)==-11
round方法返回与参数最接近的长整数,参数加1/2后求其floor.
(11)优先级
运算符(优先级从低到高) |
+ - ++ – [[ rest...]] |
* / % + - << >> |
> < >= <= == != |
&& || & | ^ |
A > B ? X : Y |
= (and compound assignment like *=) |
参考:
http://blog.csdn.net/g5dsk/article/details/4367444
相关推荐
### C++操作符优先级详解 #### 一、概述 在C++编程语言中,操作符的优先级决定了表达式中各个操作符的执行顺序。理解这些规则对于编写正确无误且高效的代码至关重要。本文将根据给定的文档资料详细介绍C++中的操作...
在C语言和C++中,运算符的优先级和结合性是编程时必须掌握的基本概念。运算符优先级决定了表达式中不同运算的计算顺序,而结合性则规定了具有相同优先级的运算符如何组合。 首先,让我们按照优先级从高到低逐个解析...
不为人知的表达式求值,操作符优先级的重要性 在C语言中,操作符的优先级排序和作用是非常重要的。操作符的优先级从高到低排序,可以分为以下几类: 1. 后缀操作符:包括后缀自增、后缀自减、数组下标、结构成员...
C语言操作符优先级.docx
C语言操作符优先级.pdf
C++操作符优先级详解 C++语言中,操作符的优先级是编程中一个非常重要的概念,它决定了在表达式中...C++操作符的优先级顺序和结合性是编程中非常重要的概念,正确地理解和使用操作符可以使代码更加简洁、可读性强。
操作符优先级,格式为图片, 凑20字真难,我郁闷
操作符的优先级和结合性是理解程序行为的关键因素。优先级决定了哪个运算先进行,而结合性规定了当多个相同优先级的操作符连续出现时,如何处理它们。 1. **操作符优先级**: - 最高优先级的操作符包括全局解析符`...
接下来,我们介绍一种有效的记忆技巧来帮助大家记住这些操作符的优先级和结合性。 1. **最高优先级**:首先要记住的是最高优先级的操作符——括号`()`和类型构造`new`、`delete`等,因为它们通常用于定义表达式的...
在C++编程语言中,操作符的优先级和结合性是理解代码执行顺序的关键。这份"C++操作符优先级.pdf"文件详细列出了C++中各种操作符的优先级和结合性规则,这对于编写和调试代码至关重要。下面将对这些知识点进行详细...
C语言操作符的优先级,结合性,用法示例,结果类型等属性
Java语言中的操作符是编程语法的重要组成部分,它们用于执行各种计算和逻辑判断。理解操作符的用法和优先级对于编写高效、准确的代码至关重要。本文将详细解析Java中的主要操作符及其应用。 首先,我们来看算术操作...
在C++编程语言中,操作符的优先级和成员初始化是两个重要的概念,它们直接影响到程序的正确性和效率。下面将分别对这两个主题进行详细解释。 首先,让我们谈谈操作符的优先级。C++中的操作符有各自的优先级规则,这...
C 语言操作符的优先级排列是一个复杂的知识点,了解每个优先级的操作符的结合性和优先级是非常重要的。本文对 C 语言操作符的优先级排列进行了详细的解释,对每个优先级的操作符进行了说明。理解 C 语言操作符的...
这份“Java操作符总结-动力节点共20页.pdf”很可能是对Java中各种操作符的一个全面概述,包括它们的用法、优先级和结合性。 在Java中,操作符主要可以分为以下几类: 1. **算术操作符**:用于执行基本的数学运算,...
Java是一种强类型语言,这意味着在Java中,每个变量都必须先声明其数据类型,然后才能使用。Java的数据类型可以分为两类:基本数据类型和引用数据类型。...使用这些操作符时,需要注意它们的优先级和结合性
C语言中的操作符优先级的详细介绍 C语言中操作符的优先级大全, 当然c++, Objective-C,大部分语言都试用。 下面是来自The C Programming Language 2th的总结。 OperatorsAssociativity(结合性) 1. () [] -> . ...