java学习笔记3——操作运算符
来源:互联网 发布:mysql压缩包下载地址 编辑:程序博客网 时间:2024/06/06 12:52
如果学过其他语言,java的运算符和其他的也差不多,这里介绍一些容易出错的
一、操作符:
java的操作符和其他的语言一致,加(+)减(-)乘(*)除(/)赋值(=)。在这里不多做阐述,主要讲的还是一些难以理解或者而比较绕的点,比如自加(++)【自减也一样】,优先级,还有逻辑运算符(&&和||),左移右移,==和equals方法的区别,
(一)、自加(++)
++的使用和–一样,这里的话只以++为例子。一般此运算符的使用方法是这样的:a=b++,与之区别的是a=++b。我们知道a++的意思是a=a+1,那么放到赋值语句中有什么不同呢?
—>a=b++:
这类用法的含义是,先使用b,即先把b赋值给a,然后执行b=b+1;如果设立一个中间值temp,可以用代码表示如下:
temp = b ;b = b + 1 ; a = temp;
—>a=++b:
这类用法是,先对b进行自加,b=b+1,然后在进行赋值,a=b,可以用代码表示如下:
a = a +1 ; b = a;
这个时候不得不提一下一道面试题:
public static void main(String[] args) { int i = 0; for (int j = 0; j < 10; j++) { i=i++; } System.out.println("i的结果是:"+i); }
相信大家第一反应应该是i=10,但是i真的等于10吗,不妨我们把其中的i=i++按照上面简述的展开:
public static void main(String[] args) { int i = 0; int temp =0; for (int j = 0; j < 10; j++) { //i=i++; temp=i;i=i+1;i=temp; } System.out.println("i的结果是:"+i); //i结果是0 }
这下大家应该可以发现了,不管循环多少次,i的值都为0,这在笔试面试时经常会出现,算是java的一个自增陷阱。 其实java对该运算的处理也是这样的,会在内存中生成一个临时存储区,即temp来存储变量进行处理。
(二)优先级
java的运算符优先级,参照下表:
这里需要说明一点,强制类型转化的优先级比应该在1和2之间。例如:
float f = 1.7F;int i = (int)f *2;//答案为2,而不是3,因为先进行强制类型转化,然后再乘,这里损失了精度
所以,在这里提醒大家在实际开发中,对于摸不准的,要善于运用括号啊
(三)、逻辑运算符(&&和||)
看着这两个就想起&(与),|(或)和^(异或),这里就是转化为二进制按位进行操作,或者是boolean类型的对比,这里不详细讲解。
&&(短路与)和||(短路或)两侧加的是表达式,进行true和false的判断,遵循以下规则:
- & 和 &&的区别
- &:无论左边结果是什么,两边都参与运算
- &&:当左边为false时,左边不参与运算
- | 和 || 的区别
- |:无论左边结果是什么,两边都参与运算
- ||:当左边为ture是,右边不参与运算
逻辑运算有异或,这里有一道题,怎么在不设置临时变量的情况下交换两个数的值,可以用^
public static void main(String[] args) { int a = 1; int b = 2; System.out.println("a=" + a + ";b=" + b); a = a ^ b; b = a ^ b; a = a ^ b; System.out.println("a=" + a + ";b=" + b);}
结果:
a=1;b=2a=2;b=1
(四)左移右移
左移<< 就是n*2(位数) 实现2的次幂运算
右移>> 就是n/2(位数) 快速运算除以2的次幂
(>>:高位出现空位时,原高位时什么,就补什么)
(>>>:无论高位是什么,都补0(<<<也一样))
(五)==和equals方法的区别
先看一段代码:
public static void main(String[] args) { int i = 1; int j = 1; Integer m = new Integer(1); String a = "123"; String b = "123"; String c = new String("123"); String d = new String("123"); String st1 = "wasiker "; String st2 = "is super man"; String st3 = "wasiker is super man"; String st4 = "wasiker is super man"; System.out.println(st1 == st2); //false System.out.println((st1 + st2) == st3);//false System.out.println(st3 == st4);//true System.out.println(i == j);//true System.out.println(i == m);//true System.out.println(a == b);//true System.out.println(c == d);//false System.out.println(a == c);//false System.out.println(m.equals(i));//true System.out.println(a.equals(b));//true System.out.println(c.equals(d));//true System.out.println(a.equals(c));//true }
可以总结:
1、==:如果两侧是基本数据类型,那么比较的是值(这里需要着重说明一下integer对象在==比较的时候,比如第17行,integer对象会自动拆箱变成int,进行值的比较,所以返回true);如果两侧是对象,那么比较的就是对象在内存中的地址
2、equals:比较的是两个对象的值是否相等,而不是比较地址
3、需要注意,String字符串想加的时候,会生成一个新的地址去指向结果,所以第14行比较的是地址,返回false。
- java学习笔记3——操作运算符
- (03)Java学习笔记——运算
- Java基础学习笔记——数据类型和运算符
- Java学习笔记:运算符
- Java学习笔记----运算符
- java学习笔记-运算符
- Java学习笔记——操作符
- JAVA学习笔记3——JDK7.0新特性+变量+运算符
- 疯狂JAVA讲义学习笔记3——数据类型和运算符
- J2SE学习笔记3 — Java基本语法(3)变量和运算符
- java学习笔记:运算
- PHP学习笔记——运算符
- Python学习笔记 —— 运算符
- C#学习笔记——运算符
- 【Java学习笔记】03.运算符与键盘录入数据操作
- java核心技术学习笔记3---运算符与类型转换
- 【JAVA学习笔记】02 运算符、表达式
- Java学习笔记(位运算符)
- Delphi 10.2 Tokyo 下载激活
- android 大文件分割上传(分块上传)
- 自己实现shadowsocks搭建
- qt中文乱码解释
- python学习笔记-3.1python运算符和if判断
- java学习笔记3——操作运算符
- (六)简单排序-选择排序
- Appdelegate跳转到指定tabbaritem
- javamail实现简单邮件发送
- datatables+json+ajax以json输出和删除
- Android listview实现分组
- 小学生图解排序算法:④希尔排序
- CentOS 7上安装nsq,并配置系统服务、开机启动
- Linux软连接与硬链接