Java运算符

来源:互联网 发布:淘宝运营论坛 编辑:程序博客网 时间:2024/06/07 03:41

Java运算符

算术运算符

Java支持所有基本的算术运算符:加,减,乘,除,求余,自加,自减等;

  • 加法运算符(也可做字符串连接运算符):+
double a = 5.2;double b = 4.0;//sum 的值为 9.2double sum = a + b;//字符串拼接String str = "aaaa" + "bbbb";
  • 减法运算符(也可做求负运算):-
double a = 5.2;double b = 4.0;//sub 的值为 1.2double sub = a - b;double c = -5.2
  • 乘法运算符:*
double a = 5.2;double b = 3.1;//multiply 的值为16.12double multiply = a * b;
  • 除法运算符:/
        如果除法的两个操作数都是整数类型,则计算结果也是整数,就是将自然除法的结果截断取整,如19/4的值为4而不是5;除数不能为0,否则会抛出异常;
        如果除法的两个操作数有一个是浮点数,或者两个都是浮点数,则计算结果也是浮点数,允许除数是0或0.0,得到的结果将是正无穷或负无穷;
double a = 5.3;double b = 3.1;//div的值为1.6774193548387097double div = a / b;//div2为正无穷大double div2 = 50.0//div3为负无穷大double div3 = -50.0//抛出java.lang.ArithmeticException异常double div4 = 50
  • 求余:%
        求余的结果不一定是整数,由于需要经过除法运算,所以必需满足除法的运算规则;当两个数都为整数类型时,第二个数不能为0,否则会抛出异常;
        当两个数中有一个浮点数时,第二个操作数据可为0或0.0,只不过结果为非数:NaN;0或0.0对零以外的任何数求余都是0或0.0;
double a = 5.2;double b = 3.1;//mod 的值为2.1;double mod = a % b;//mod1 的结果为NaNdouble mod1 = 5 % 0.0//mod2 的结果为NaNdouble mod2 = -5 % 0.0;//mod3 的结果为0.0;double mod3 = 0 % 5.0;//mod4 的结果为NaNdouble mod4 = 0 % 0.0;//抛出java.lang.ArithmeticExceptiondouble mod5 = 5 % 0
  • 自加:++
        自加是单目运算符,只能操作一个操作数;自加运算符只能操作单个数值型(整形、浮点型都行)的变量,不能操作常量或表达式;运算符可出现在操作数的左边也可出现在操作数的右边;++出现在操作数的左边是先自加(加1)再把自加后的结果放入表达式中运算;++出现在操作数的右边是先把操作数放入表达式运算后再自加;
int a = 5;//b 的结果为11,a为6int b = ++a + 5;a = 5//c 的结果为10,a为6;int c = a++ + 5;//以下写法是错误的5++;++5
  • 自减:- -
        自减也是单目运算符,只能操作一个操作数;自减运算符只能操作单个数值型(整形、浮点型都行)的变量,不能操作常量或表达式;运算符可出现在操作数的左边也可出现在操作数的右边;–出现在操作数的左边是先自减(减1)再把自减后的结果放入表达式中运算;–出现在操作数的右边是先把操作数放入表达式运算后再自减;
int a = 5;//b 的结果为9,a为4int b = --a + 5;a = 5//c 的结果为10,a为4;int c = a-- + 5;//以下写法是错误的5--;--5

赋值运算符

    赋值运算符用于诶变量指定变量值;因为赋值运算符是有值的,值就是赋值运算符右边的值,所以支持连续赋值(但不推荐使用,降低了代码的可读性);

String str = "aaa";int a = 5;String str2 = str;double sum = a + 5.0int b;int c;int d;b = c = d = 7;//不推荐使用

    赋值运算符可与算数运算符、位移运算符结合;

  • +=;对应于x += y;即x = x + y;
  • -=;对应于x -= y;即x = x - y;
  • *=;对应于x = y;即x = x y;
  • /=;对应于x /= y;即x = x / y;
  • %=;对应于x %= y;即x = x % y;
  • &=;对应于x &= y;即x = x & y;
  • |=;对应于x |= y;即x = x | y;
  • ^=;对应于x ^= y;即x = x ^ y;
  • <<=;对应于x <<= y;即x = x << y;
  • >>=;对应于x >>= y;即x = x >> y;
  • >>>=;对应于x >>>= y;即x = x >>> y;

比较运算符

    比较运算符用于比较两个常量或变量的大小,比较结果是一个布尔值;

  • > 大于,只支持左右两边操作数都是数值类型。如果前面的操作数大于后面的操作数则返回true;
  • >= 大于等于,只支持左右两边操作数都是数值类型。如果前面的操作数大于等于后面的操作数则返回true;
  • < 小于,只支持左右两边操作数都是数值类型。如果前面的操作数小于后面的操作数则返回true;
  • <= 小于等于,只支持左右两边操作数都是数值类型。如果前面的操作数小于等于后面的操作数则返回true;
  • == 等于,如果进行比较的两个操作数都是数值类型,即使他们的类型不同,只要值相等,也都返回true;如果两个操作数都是引用类型,那么只有当两个引用变量的类型具有父子关系时才可以进行比较,而且两个引用必须指向同一个对象才会返回true;同时也支持两个boolean类型的比较;基本类型的变量、值不能和引用类型的变量和值使用==进行比较;boolean类型的变量、值不能与其他类型的变量、值使用==进行比较;如果两个引用类型的之间没有父子继承关系,也不能使用==进行比较;
  • != 不等于,如果进行比较的两个操作数都是数值类型,无论他们的类型是否相同,只要值不同,也都返回true;如果两个操作数都是引用类型,那么只有当两个引用变量的类型具有父子关系时才可以进行比较,只有当两个引用必须指向不同对象才会返回true;同时也支持两个boolean类型的比较;基本类型的变量、值不能和引用类型的变量和值使用!=进行比较;boolean类型的变量、值不能与其他类型的变量、值使用!=进行比较;如果两个引用类型的之间没有父子继承关系,也不能使用!=进行比较;
int a = 5;double b = 4.0;char c = 'a';//b1 trueboolean b1 = a > b;//b2 trueboolean b2 = b == 5.0;//b3 trueboolean b3 = 97 == c;/b4 falseboolean b4 = true ==  false;//Test 为一个类,这里没有定义Test test1 = new Test();Test test2 = new Test();Test test3 = test1;//b5 false test1,test2 指向不同对象boolean b5 = test1 == test2;//b6 true test1,test3 指向同一个对象boolean b6 = test1 == test3;

逻辑运算符

    用于操作两个布尔型的变量或常量;

  • && 与,前后两个操作数必须都是true才会返回true;先计算左边的的操作数,如果左边的操作数为false则返回false,如果为true才计算右边的操作数;
  • & 不短路与,作用与&&相同,但不会短路;不管左边的操作数是true还是false,都会计算右边的数;
  • || 或,只要两个操作数有一个为true就返回true;先计算左边的的操作数,如果左边的操作数为true则返回true,如果为false才计算右边的操作数;
  • | 不短路或,作用与||相同,但不短路;不管左边的操作数是true还是false,都会计算右边的数;
  • !非,只需要一个操作数,如果操作数为true则返回false,操作数为false则返回true;
  • ^ 异或,当两个操作数不同时才返回true;
boolean a = true;boolean b = false;//c falseboolean c = !a;//d trueboolean d = a ^ b;//f true 5 >3 ture, 'a' > 10 trueboolean f = 5 > 3 && 'a' > 10;//g false 5 < 3 false,不会进行'a' > 10的判断boolean g = 5 < 3 && 'a' > 10;//h false 5 < 3 false,会进行'a' > 10的判断boolean h = 5 < 3 & 'a' > 10;//i true 5 > 3 true 不会进行'a' > 10的判断boolean i = 5 > 3 || 'a' > 10;//j true 5 > 3 true,会进行'a' > 10的判断boolean j = 5 > 3 | 'a' > 10;

位运算符

  • 按位与(当两位同时为1时才返回1):&
int a = 5;int b = 9;//c 的值位1int c = a & b;5的二进制码为00000101(前面省略240),9的二进制码为00001001(前面省略240000001015000010019)--------- &00000001(结果1
  • 按位或(只要有一位为1时就返回1):|
int a = 5;int b = 9;//c 的值位13int c = a | b;5的二进制码为00000101(前面省略240),9的二进制码为00001001(前面省略240000001015000010019)--------- |00001101(结果13
  • 按位非(单目运算符,将操作数的每一位(包括符号位)全部取反:~
int a = -5;//b 的值为4int b = ~a;-5 的原码为10000000000000000000000000000101;(计算机存储的为补码)-5 的反码为11111111111111111111111111111010;(符号位不变,其余各位反码)-5 的补码为11111111111111111111111111111011;(反码加1)-5 按位非为00000000000000000000000000000100;(正数的补码和原码相同,所以为结果4
  • 按位异或(当两位相同时返回0,不同时返回1): ^
int a = 5;int b = 9;//c 的值位12int c = a ^ b;5的二进制码为00000101(前面省略240),9的二进制码为00001001(前面省略240000001015000010019)--------- ^00001100(结果12
  • 左移运算符:<<
        左移运算符是将操作符的二进制码整体左移指定位数,左移空出来的位以0填充
int a = 5;//b 的值为20int b = 5 << 2;5的二进制码为00000101(前面省略240),左移2位为00010100,结果为20int c = -5//d 的结果为-20int d = -5 << 2;-5的二进制码为11111011(前面省略241),左移2位为11101100,结果为-20
  • 右移运算符:>>
        右移运算符是将操作数的二进制码整体右移指定的位数,右移空出来的位以原来的符号为填充;
int a = 5;//b 的值为1int b = a >> 2;5的二进制码为00000101(前面省略240),右移2位为00000001,结果为1int c = -5int d = c >> 2;-5的二进制码为11111011(前面省略241),右移2位为11111110,结果为-2
  • 无符号右移运算符:>>>
        无符号右移运算符是将操作数的二进制码整体右移指定的位数,右移空出来的位总是补0;
int a = -5;//b 的值为1073741822int b = a >>> 2;-5的二进制码为11111011(前面省略241),无符号右移2位为00111111 11111111 11111111 11111110,结果为1073741822

    一般来说,位运算符只能操作整数类型的变量或值:

第一个操作数 第二个操作数 按位与(&) 按位或(|) 按位异或(^) 0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0
  • 对于低于int 类型(如byte,short,char)的操作数总是先自动转换为int类型后再移位;
  • 对于int类型,a>>b,当b>32时,系统总是先用b对32求余(因为int只有32位),得到的结果才是真正移位的位数;
  • 对于long类型整数移位a>>b,当b>64时,系统总是先用b对64求余(因为long只有64位),得到的结果才是真正移位的位数;
  • 进行移位运算不会改变操作数本身,只是得到一个新的运算结果,原先的操作数结果不变;

三目运算符

  • ?:(expression)?if-true-statement:if-false-statement;
        先对逻辑表达式expression求值,如果逻辑表达式返回true,则返回第二操作数的值,如果为false则返回第三个操作数的值;
//str 为5大于3String str = 5 > 3 ? "5大于3" : "5小于3"
0 0
原创粉丝点击