疯狂Java笔记:3.7 运算符
来源:互联网 发布:php运行环境配置 编辑:程序博客网 时间:2024/05/16 17:10
3.7 运算符
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 位运算符
- 类型相关运算符
3.7.1 算术运算符
用于表示数据的运算、赋值、比较。
+:加法运算,连接字符串-:减法运算,求负运算eg:a=-a;*:乘法运算/:除法运算 两个操作数都是整数,则计算结果是整数[截断取整],且除数不能是 0 如果两个操作数至少有一个浮点数,则结果为浮点数,允许除数为0[自动转换成 0.0],得到非数或±无穷大%:求余运算 结果不一定总是整数。 规则同除法。 X%0 ->NaN 0/0.0 对任何非0求余结果都是 0/0.0++/--:自增/减运算: 单目运算符,只能操作一个操作数 只能操作单个数值型的变量,不能操作常量、表达式、数值直接量 i++:先运算,后自增 ++i:先自增,后运算
其他乘方、开方等运算可借助 java.lang.Math
类的丰富的静态方法来完成。
/** * 算术运算符、Math类测试 */public class MathTest{ public static void main(String[] args) { //除法运算 //1、两个操作数都是浮点数,结果是浮点数,允许除数为0或者0.0得到正负无穷大 double a = 5.2,b = 3.1; double div = a / b; System.out.println(div+"\t"+"±5除以0.0的结果是:" + 5.0 / 0+"\t"+- 5 / 0.0); //2、两个操作数都是整数,结果也是整数,且除数不能为0 int c=4,d=3; short div1=(short)(c/d);//编译出错,类型不匹配 System.out.println(div1+"\t"+"-5除以0的结果是:"/* + -5/0*/);//抛出算术异常 //求余运算 double mod = a % b; //1、运算结果不一定总是整数,限制同除法运算。 System.out.println(mod); //2、第二个操作数0.0,结果是非数NaN。 System.out.println("0、±5对0.0求余的结果是:" + +0 % 0.0+"\t"+5 % 0.0+"\t"+ -5%0.0); //3、0或0.0对任意非0数求余得到0或0.0 System.out.println("0对5.0求余的结果是:" + 0 % 5.0); // 输出0.0 //抛出算术异常:java.lang.ArithmeticException: / by zero // System.out.println("-5对0求余的结果是:" + -5 % 0); //Math类测试 double a1=3.2; double b1=Math.pow(a1,5);//求a1的五次方 double c1=Math.sqrt(a1);//求a1的平方根 double d1=Math.random();//赋给d伪随机数0~1 double e1=Math.sin(1.57);//求sin函数值 System.out.println(b1+"\t\t"+c1+"\t"+d1+"\t\t"+e1); }}
3.7.2 赋值运算符
- 用于为变量指定变量值
- 赋值运算符=从右向左计算,因此左边只能是变量
- 表达式是有值的
/** * 赋值运算符 */public class AssignTest{ public static void main(String[] args) { // 1、将直接量赋值给变量 String str="Java"; // 2、将一个变量赋值给另一个变量 String str2=str; // 3、将表达式的值赋值给变量 String str3=str2="String"; System.out.println(str+"\t"+str2+"\t"+str3); // 4、赋值表达式是有值的,例如表达式c=7的值为7,因此可以连续赋值 int a,b,c; a=b=c=7; System.out.println(a+"\t"+b+"\t"+c); // 5、扩展运算符――――性能更好,程序更加健壮,推荐使用 byte a1=5; // a=a1+5;//5是int,a+5提升为int,赋值给byte,编译出错 byte b1=5; b1+=5;//不会出错 b1=2; System.out.println(a1+"\t"+b1); b1=a1;//证明b仍然是byte类型 }}
3.7.3 位运算符
/** * 位运算符 */public class BitTest{ public static void main(String[] args) { // System.out.println(2.5&3.0); System.out.println(5&9);//按位与:两位同时为1返回1 System.out.println(5|9);//按位或:只要有一位为1即可返回1 System.out.println(~-5);//按位非:单目运算符,将操作数每个位取反,包括符号位 System.out.println(5^9);//按位异或:两位相同时返回0,不同返回1 System.out.println(5<<2);//左移运算符:左边截断,右边空出的位补0 System.out.println(-5<<2); System.out.println(-5 >> 2);//右移运算符:左边补充符号位的值,右边截断 System.out.println(-5 >>> 2);//无符号右移运算符:左边总是以0补充 }}
- 低于int类型,自动转换为int类型后再移位
- int类型,a>>b,当b>32时,系统用b对32求余后得到的结果为移位位数
- long类型,同int,对64求余。eg:a>>1和a>>65是相同效果的
- 左移相当于乘以2的n次方,右移相当于除以2的n次方
- 移位运算不改变操作数本身,只是得到一个新的运算结果。
3.7.4 扩展后的赋值运算符
赋值运算符可与算术运算符、移位运算符结合。
示例:
i=i+j;-->i+=j; i=i%j;-->i%=j;
3.7.5 比较运算符
比较运算的结果是布尔值true|false
1. 基本类型变量、值不能和引用类型变量、值比较,
2. boolean变量、值不能和其他任意类型变量、值比较,
3. 两个引用类型之间没有父子继承关系,也不能比较
4. >、>=、<、<=:只支持左右两边操作数是数值类型
5. ==/!=:
- 两边都是数值类型,即使数据类型不同,值相等即返回true 例如:97==’a’
- 如果都是引用类型,只有当两个引用变量的类型相同或具有父子关系时才可以比较,且必须指向同一个对象才返回true。
- 支持boolean类型值的比较
/** * 比较运算符 */public class CompareTest{ public static void main(String[] args) { System.out.println("5大于 4.0:" + (5 > 4.0)); System.out.println("5和5.0相等:" + (5 == 5.0)); System.out.println("97和'a'相等:" + (97 == 'a')); System.out.println("true和false相等:" + (true == false)); CompareTest m1=new CompareTest(); CompareTest m2=new CompareTest(); CompareTest m3=m1; //同一个类三个实例的引用,可以比较 System.out.println("m1和m2相等:" + (m1==m2));//引用对象不同false System.out.println("m1和m3相等:" + (m1==m3));//引用对象相同true }}
3.7.6 逻辑运算符
用于操作两个布尔型的变量或常量
&&:短路与,前后操作数都是ture才返回true&:不短路与,作用同&&,但不会短路[无论左边是否为false,右边仍然会执行]||:短路或,前后操作数有一个true,就返回true|:不短路或,作用与||相同,不会短路!:非单目运算符,取相反值^:异或,两个操作数不同时返回true,否则返回false
/** * 逻辑运算符 */public classs LogicTest{ public static void main(String[] args) { // 直接对false求非运算,将返回true System.out.println(!false); // 5>3返回true,'6'转换为整数54,'6'>10返回true,求与后返回true System.out.println(5 > 3 && '6' > 10); // 4>=5返回false,'c'>'a'返回true。求或后返回true System.out.println(4 >= 5 || 'c' > 'a'); // 4>=5返回false,'c'>'a'返回true。两个不同的操作数求异或返回true System.out.println(4 >= 5 ^ 'c' > 'a'); // 定义变量a,b,并为两个变量赋值 int a = 5; int b = 10; // 对a > 4和b++ > 10求或运算 if (a > 4 | b++ > 10){ // 输出a的值是5,b的值是11。 System.out.println("a的值是:" + a + ",b的值是:" + b); } // 定义变量c,d,并为两个变量赋值 int c = 5; int d = 10; // c > 4 || d++ > 10求或运算 if (c > 4 || d++ > 10){ // 输出c的值是5,d的值是10。 System.out.println("c的值是:" + c + ",d的值是:" + d); } }}
3.7.7 三目运算符
(isTrue)?true:false
不支持多个语句,可以嵌套[降低可读性,一般不超过两层]
/** * 三目运算符 */public class ThreeTest{ public static void main(String[] args) { // 三目运算符 // d=c?a:b // c为true时d=a,反之d=b; // 示例: String str= 5>3 ? "5大于3" : "5不大于3"; System.out.println(str); //三目运算符支持嵌套 int a=11,b=12; System.out.println( a>b ? "a大于b" : (a<b ? "a小于b" : "a等于b") ); }}
3.7.8 运算符的结合性和优先级
- 从左向右结合[单目运算符、赋值运算符、三目运算符相反]
- 乘法和加法的操作数可以互换位置不影响结果[具有结合性]
- 注意:
- 一个表达式不能过于复杂,可分步完成
- 不要过多依赖运算符的优先级来控制表达式执行顺序,造成代码可读性差,应使用()
运算符优先级从高到低:
0 0
- 疯狂Java笔记:3.7 运算符
- 算术运算符—[疯狂java讲义]
- 赋值运算符—[疯狂java讲义]
- 比较运算符—[疯狂java讲义]
- 疯狂Java之学习笔记(8)-------------运算符和循环结构(流程控制)
- 疯狂JAVA讲义学习笔记3——数据类型和运算符
- 疯狂java笔记:关于final修饰符
- 疯狂Java讲义笔记
- 疯狂Java讲义笔记
- 《疯狂Java讲义》笔记
- 疯狂java学习笔记
- 疯狂JAVA讲义---第三章(下):运算符
- 疯狂java讲义 第三章 数据类型和运算符
- [疯狂Java讲义精粹] 第二章|数据类型和运算符
- 《疯狂JAVA讲义》——instanceof运算符
- 疯狂java讲义学习——数据类型与运算符
- [疯狂Java]SQL:常量、变量、运算符、字符串匹配运算符like
- 《疯狂Java讲义》学习笔记
- Java NIO笔记之内存映射文件
- jprofiler 安装和连接linux(tomcat)
- jsp引用css和js文件方法 以及 java web应用程序文件结构
- 在(U)EFI环境下重装Grub2
- Minimum Absolute Difference in BST
- 疯狂Java笔记:3.7 运算符
- 向文档中添加列表项
- servlet相关配置及会话跟踪技术
- HDU 2084
- double+pow函数p2109
- Servlet生命周期与工作原理
- BZOJ 2795:[Poi2012]A Horrible Poem
- 3. Longest Substring Without Repeating Characters Medium
- Python sorted