对于java而言,数据类型有多种,而运算也是有多种的,本文会为你们讲解常见的运算符。html
主要有:java
在以前的文章中咱们讲过,声明变量就至关于在内存中获得了一起地,那么这块儿地上存什么,须要咱们将数据赋值上去,赋值就是把这块位置的内容设为一个肯定的值。git
对变量进行赋值咱们须要使用到的就是赋值运算符,常见的赋值运算符是=,注意:在java中=是用来赋值的。github
数学运算符有加减乘除,符号分别是+-*/,另外还有取模运算符%,以及自增(++)和自减(–)运算符。取模运算适用于整数和字符类型,其余数学运算适用于全部数值类型和字符类型。加减乘除大部分状况和直观感受是同样的,都很容易理解,须要注意的是++ -- 以及和赋值运算符结合以后的+= -=。安全
在使用整数进行数学运算的时候,咱们须要注意类型的范围,一旦计算结果超出了表示范围又没有用合适的类型接收就会出现问题。什么意思的呢?看下面的例子多线程
int a = 2147483647*2; //2147483647是int能表示的最大值
复制代码
此时打印a的结果是-2。解决方式是用long接收结果。spa
为何会出现这样的状况?线程
须要从二进制提及,内容稍多,因此细节就不说来,简单说就是二进制加减法,当计算结果超出表示范围的时候,最高位每每是1,会被看作负数。code
在进行数学运算的时候咱们须要注意的就是类型自动提高的问题,在以前讲解数据类型的时候提到过自动类型提高,本文不作过多的讲解。htm
当+ 和 赋值= 结合起来以后就至关于运算以后赋值,例如a+=2就至关于a=a+2,这两种方式没有结果上的区别,在使用的过程当中也不会能够的区分,可是他们之间仍是有区别的。
上文咱们说到,在进行操做的时候,会发生自动类型提高,byte类型的a加10会变为int,*经过+=的写法不会发生自动类型提高,一样-= = /=都不会发生自动类型提高。
在JDK中为咱们提供了自增运算符++,自减运算符--,首先须要说明的是++ -- 也不会发生自动类型提高。
例如:a++至关于a+=1至关于a=a+1。
a++是一个表达式 ,那么a++
就会有一个表达式的计算结果,这个计算结果就是a的旧值(加1前的值)。相对的,++a
表达式的计算结果a加1后的值。因此他们的本质区别是:表达式的值(运算结果) 是加1前的变量的值仍是加1后的变量的值(自减也是如此)。换句话说:a++计算以后a的值确实加了1 ,可是a++这个表达式总体的值是加1以前的值。
a++ 没有 ++a 快 ++a省去一个寄存器
另自增自减是非线程安全的,自增自减运算符包含两个操做:一个加1(减1)的操做和一个赋值的操做,不是原子操做,所以,在多线程下,若是你要对共享变量实现自增自减操做,就要加锁,或者使用JDK提供的原子操做类(如AtomincInteger
,AtomicLong
等)提供的原子性自增自减方法。
也叫做关系运算符,会造成布尔表达式。主要用来计算两个值之间的关系,结果是一个布尔类型(boolean)的值。适用于全部数值类型和字符类型。
比较操做符有:大于(>),大于等于(>=),小于(<),小于等于(<=),等于(==),不等于(!=)。
在此处须要注意的是等于。等于使用两个等号==,而不是一个等号(=)。一个等号(=)表示赋值操做。
逻辑运算根据数据的逻辑关系,生成一个布尔值true或者false。逻辑运算只可应用于boolean类型的数据,但比较运算的结果是布尔值,因此其余类型数据的比较结果可进行逻辑运算。
逻辑运算符具体有:
逻辑运算的大部分都是比较直观的,须要注意的是&和&&,以及|和||的区别。
参考资料
http://www.cnblogs.com/jinggod/p/8424808.html
我不能保证每个地方都是对的,可是能够保证每一句话,每一行代码都是通过推敲和斟酌的。但愿每一篇文章背后都是本身追求纯粹技术人生的态度。
永远相信美好的事情即将发生。