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 = 5 / 0.0;//div3为负无穷大double div3 = -5 / 0.0;//抛出java.lang.ArithmeticException异常double div4 = 5 / 0;
- 求余:%
求余的结果不一定是整数,由于需要经过除法运算,所以必需满足除法的运算规则;当两个数都为整数类型时,第二个数不能为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.0;int 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(前面省略24个0),9的二进制码为00001001(前面省略24个0)00000101(5)00001001(9)--------- &00000001(结果1)
- 按位或(只要有一位为1时就返回1):|
int a = 5;int b = 9;//c 的值位13int c = a | b;5的二进制码为00000101(前面省略24个0),9的二进制码为00001001(前面省略24个0)00000101(5)00001001(9)--------- |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(前面省略24个0),9的二进制码为00001001(前面省略24个0)00000101(5)00001001(9)--------- ^00001100(结果12)
- 左移运算符:<<
左移运算符是将操作符的二进制码整体左移指定位数,左移空出来的位以0填充
int a = 5;//b 的值为20int b = 5 << 2;5的二进制码为00000101(前面省略24个0),左移2位为00010100,结果为20;int c = -5;//d 的结果为-20int d = -5 << 2;-5的二进制码为11111011(前面省略24个1),左移2位为11101100,结果为-20;
- 右移运算符:>>
右移运算符是将操作数的二进制码整体右移指定的位数,右移空出来的位以原来的符号为填充;
int a = 5;//b 的值为1int b = a >> 2;5的二进制码为00000101(前面省略24个0),右移2位为00000001,结果为1;int c = -5;int d = c >> 2;-5的二进制码为11111011(前面省略24个1),右移2位为11111110,结果为-2;
- 无符号右移运算符:>>>
无符号右移运算符是将操作数的二进制码整体右移指定的位数,右移空出来的位总是补0;
int a = -5;//b 的值为1073741822int b = a >>> 2;-5的二进制码为11111011(前面省略24个1),无符号右移2位为00111111 11111111 11111111 11111110,结果为1073741822;
一般来说,位运算符只能操作整数类型的变量或值:
- 对于低于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
- Java运算赋值运算符
- Java| Java 运算符
- Java位运算符
- java运算符
- java中的“%”运算符
- Java 位运算符
- Java 位运算符
- Java 位运算符
- Java 位运算符
- java 运算符优先级
- Java 位运算符
- java 运算符
- JAVA入门:运算符
- JAVA 运算符 >> >>> <<
- JAVA移位运算符
- Java 位运算符
- JAVA移位运算符
- java 运算符
- 小甲鱼PE详解之区块描述、对齐值以及RVA详解(PE详解06)
- JAVA基础【3.9】《Java核心技术1》Java的基本程序设计结构-大数值
- ThinkPad E550 加装固态安装Windows 7系统
- 小甲鱼PE详解之输入表(导入表)详解(PE详解07)
- 小甲鱼PE详解之输入表(导入表)详解2(PE详解08)
- Java运算符
- Android ActionBar隐藏修改图标和标题
- qwt 6.1.0集成进Qt creator 2.8.1步骤
- tq2440编译ARM版本的Qt4出错问题解决
- load_elf_binary阅读(1)
- 设计模式之装饰者模式
- load_elf_binary阅读(2)
- 日本“冷知识”你都知道吗?
- main.c阅读