重构Java基础 (二) | 浅谈java运算符
发布日期:2021-05-10 06:27:44 浏览次数:30 分类:原创文章

本文共 5450 字,大约阅读时间需要 18 分钟。



目录













































1. java中的运算符


Java中的运算符分为:算术运算符,移位运算符,比较运算符,位运算符,逻辑运算符,条件运算符,赋值运算符.接下来对以上运算符逐一详解


1.1 算术运算符


	+ - * / %   %:任何整数模2不是0就是1,所以只要改变被模数就可以实现开关运算。	+:连接符。	++,--

1.1.1 加减运算符


对基本数值类型的数据进行加减运算,结果的数据类型取决于两个操作数的数据类型。
当两个操作数类型为char,byte,short 和int类型时,其运算结果的数据类型必为int 。
"+"还用于连接两个对象的运算,将用于连接两个字符串连接起来。


int a=a+1;//把(a+1)的值赋值给aString str=”abc”+”bcd”;//连接两个字符串

1.1.2 乘法运算符


运算符用于对两个基本数值类型的数据进行相乘运算,其运算的数据类型取决于两个操作数的数据类型。注意:当两个操作数类型为char , byte , short,int类型时,其运算结果数据类型必为int。


int a=b*c; // b=10 c=10   结果 :a=100

1.1.3 除法运算符


除运算用于两个基本数值的类型数据进行相除运算。当相除的两个操作数均为整数时,如果运算结果为整数,则将运算结果作为返回值返回;如果运算结果不为整数,则运算结果整数部分作为返回值返回。当相除的两个操作数只要有一个为浮点数时,则运算结果必为浮点数。当除运算中右操作数取值为0时,如果操作数均为整数,则会抛出算术异常ArithmeticException;如果操作数中至少有一个为浮点数时,则结果为一个Infinity值。


int a=b/c; // b=10,c=10  结果:a=1

1.1.4 取模运算符


取模运算%用于从除法中获得两数相除的余数。取模运算的操作数既可以是整数,也可以是浮点数,取模的过程实际是用左操作数连续减去右操作数,直到相减的结果小于右操作数,此时的结果即为余数。此过程适于操作数中有浮点数和负数的情况。当取模运算中右操作数取值为0时,如果操作数均为整数,则会抛出算术异常ArithmeticException,因为取模运算归根结底为算术除法运算;如果操作数至少有一个浮点数,则结果为一个NAN(Not a Number)值。取模运算结果的正负符号完全取决于左操作数,即和左操作数的正负符号一致。


int a=b%c; // b=10,c=10 结果:a=0

1.2 移位运算符


Java定义了几个位运算符,分别为带符号左移位运算符<<,带符号右移位运算符>>和无符号右移位运算符>>>,它可以应用到整数类型,长型,整型,短整型,字符和字节。位运算符作用于位,并执行逐位操作


1.2.1 左移运算符


左移运算符用“<<”表示,是将运算符左边的对象,向左移动运算符右边指定的位数,并且在低位补零。其实,向左移n 位,就相当于乘上2 的n 次方


public class data{
public static void main(String[] args){
int a=2;int b=2;system.out.println("a 移位的结果是:"+(a<<b));}}// a 移位的结果是:8

1.2.2 右移运算符


右移运算符用符号“>>>”表示,是将运算符左边的对象向右移动运算符右边指定的位数,并且在高位补0,其实右移n 位,就相当于除上2 的n 次方。


public class data{
public static void main(String[] args){
int a=16; int b=2; System.out.println("a 移位的结果是:"+(a>>>b));}}// a 移位的结果是:4

1.2.3 带符号的右移运算符


带符号的右移运算符用符号“>>”表示,是将运算符左边的运算对象,向右移动运算符右边指定的位数。如果是正数,在高位补零,如果是负数,则在高位补1


public class data17{
public class data19{
public static void main(String[] args){
int a=16; int c=-16; int b=2; int d=2; System.out.println("a 的移位结果:"+(a>>b)); System.out.println("c 的移位结果:"+(c>>d)); }}//结果a 的移位结果:4c 的移位结果:-4

1.3 比较运算符



Java语言共提供了6种比较运算符,它们分别为小于,小于等于,大于,大于等于,等于,不等于。这6个比较运算符适合所有基本类型数值之间的比较,但布尔型值只能与布尔型值比较,比较运算的结果是一个布尔型值,整个比较表达式可以作为逻辑运算符的操作数,除了可以用于基本类型数值之间的比较,也可以应用于对象变量之间的比较。字符型值可以作为比较操作数与其他基本类型数值(除布尔型值外)进行比较,因为每个字符都有一个对应的标准字符码。当字符型值进行比较运算时,实际比较的是该字符对应的一个整数字符码。



特点:该运算符的特点是:运算完的结果,要么是true,要么是false。



  1. == 和!= 运算符
    == 和!= 运算符:关系运算符等于(==)和不等于(!=)不仅可以用于基本类型数值之间的比较,而且可以用于引用型之间的比较,但是这种引用型之间的比较不同于基本类型数值之间的比较,是对象的引用值,即内存地址。两个引用变量之间的等于比较是在判断这两个变量是否引用了同一个对象。如果需要判断两个对象的内容是否相等,则应该使用equals()方法。在java.lang.Object中定义的equals()方法用来比较两个对象的内容是否相等。


int a=1,b=1;a==b的结果是trueString s1="123",s2="123";s1==s2的结果是trueString s1="123";String s2=new String("123");s1==s2的结果是false;


  1. > 或 >=运算符
    > 或 >=运算符: 分别对应大于和大于等于,根据比较的结果返回值为true或false


Boolean a=c<b; //  c=20,b=10 结果:a=false 

3.< 或 <=运算符
< 或 <=运算符:分别对应小于和小于等于,根据比较的结果返回值为true或false。


Boolean a=c>b; //c=20,b=10  结果:a=true

1.4 位运算符



Java语言中共提供了4种按位运算符,分别为按位与(&), 按位或(|),按位异或(^)和按位非(),这四个运算符适合所有整型数据。进行按位运算时,总是先将字符型、字节型、短整型值转换为整型再进行位运算。对于布尔型运算只有按位非()不能用于布尔型数值。其他3种位运算都可以把布尔型数值当作一个具有一位值进行按位运算。布尔型值为true对应为1,false对应为0,尽管位运算可以应用于布尔型,但不能将布尔型值和其他整数型值混合使用,如混合使用,将发生类型转换错误,因为布尔型值和其他基本类型之间不能进行相互转换。



1.4.1 与运算


& 运算符:&(与)运算符对于两个整型操作数中对应的位执行操作。详情见下表:
































X位 Y位 结果
1 0 0
0 1 0
0 0 0
1 1 1

1.4.2 或运算


| 运算符:|(或)运算符对于两个整数型操作数中对应的位执行操作。详情见下表:
































X位 Y位 结果
1 0 1
0 1 1
0 0 0
1 1 1

1.4.3 异或运算


^ 运算符:^(异或)运算符对于两个整数型操作数中对应的位执行操作。详情见下表:
































X位 Y位 结果
1 0 1
0 1 1
0 0 0
1 1 0

1.5 逻辑运算符


逻辑运算符共有三种:!(逻辑取反),&&(逻辑与),||(逻辑或)。它们的操作数类型必须是一个布尔值或布尔表达式。


1.5.1 !运算符


public class data{
public static void main(String[] args) int a=2; System.out.println("a 非的结果是:"+(~a)); }}

1.5.2 && 运算符


&& 运算符:类似按位与的公式。左右操作数必须是一个布尔值或是一个布尔表达式。该运算符存在逻辑短路的现象:A&&B&&C。如果A为false,那么后面的表达式就不运算了;


public class data{
public static void main(String[] args){
int a=129; int b=128; System.out.println("a 和b 与的结果是:"+(a&b));}}// 运行结果a 和b 与的结果是:128

1.5.3 || 运算符


|| 运算符:类似按位与的公式。左右操作数必须是一个布尔值或是一个布尔表达式。该运算符存在逻辑短路的现象:A||B||C。如果A为true,那么后面的表达式就不运算了。


public class data{
public static void main(String[] args) int a=129; int b=128; System.out.println("a 和b 或的结果是:"+(a|b)); }}// 运行结果a 和b 或的结果是:129

1.6 条件运算符


条件运算符是Java语言中唯一的一个三目运算符(三个操作数)相当于if…else。其格式:


条件值?表达式1: 表达式2

整个表达式的值、表达式1的值、表达式2的值的类型必须一致。当条件值为true,那么整个表达式的最终结果为表达式1的结果;如果为false,最终结果就是表达式2的结果。条件运算符最终的结果类型,是由两个子表达式来决定的,两个子表达式之间进行类型转换。转换规则满足向取值范围宽的方向转换。
实例:


public class Test {
public static void main(String args[]){
int a , b; a = 10; b = (a == 1) ? 20: 30; System.out.println( "Value of b is : " + b ); b = (a == 10) ? 20: 30; System.out.println( "Value of b is : " + b ); }}// 结果:Value of b is : 30Value of b is : 20

1.7 赋值运算符


赋值运算符用于将具体数值赋给变量。
赋值运算符有:=,+=,-=,*=,/=,%=,>>=,<<=,&=,^=,|=
格式:


类型  变量名=

1.8 复合运算符


复合运算符就是可以同赋值运算符进行不同的组合,组合详情如下表:

















































复合运算符 含义 复合运算符 含义
+= a+=b等于a=a+b <<= a<<=b等于a=a<<b
-= a-=b等于a=a-b >>>= a>>>=b等于a=a>>>b
*= a*=b等于a=a*b &= a&=b等于a=a&b
/= a/=b等于a=a/b |= a|=b等于a=a|b
%= a%=b等于a=a%b ^= a^=b等于a=a^b
>>= a>>=b等于a=a>>b ~= a~=b等于a=a~b

2. 运算符的优先级


Java语言中的运算符有着不同的级别,优先级高的运算符先被运行,具体运算符的级别由高到低排列如下:



单操作数运算符 > 算术运算符 > 移位运算符 > 比较运算符号 > 位运算符 >逻辑运算符 > 条件运算符 > 赋值运算符



3.总结



  1. 算术运算符:
    + - * / % %:任何整数模2不是0就是1,所以只要改变被模数就可以实现开关运算。
    +:连接符。
    ++,–

  2. 赋值运算符:
    = += -= *= /= %=

  3. 比较运算符:
    特点:该运算符的特点是:运算完的结果,要么是true,要么是false。

  4. 逻辑运算符:
    & | ^ ! && ||



  • 逻辑运算符除了 ! 外都是用于连接两个boolean类型表达式。

  • &: 只有两边都为true结果是true。否则就是false。

  • |:只要两边都为false结果是false,否则就是true

  • ^:异或:和或有点不一样。

  • 两边结果一样,就为false。

  • 两边结果不一样,就为true.



  1. & 和 &&区别:
    & :无论左边结果是什么,右边都参与运算。
    &&:短路与,如果左边为false,那么右边不参数与运算。


  2. | 和|| 区别:|:两边都运算。
    ||:短路或,如果左边为true,那么右边不参与运算。


  3. 位运算符:用于操作二进制位的运算符。
    & | ^
    << >> >>>(无符号右移)



第一篇:

上一篇:重构Java基础 (三) | 程序控制
下一篇:重构Java基础 (一) | 说说java中的常量与变量

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2025年05月02日 19时51分30秒