告诉你java在&和&&在逻辑运算上差别的原因
来源:互联网 发布:软件行业人均产值 编辑:程序博客网 时间:2024/04/29 19:49
源代码如下:
public class LogicalOperator{ public static void Test1(int x,int y){ if(x > 1 && y > 1) System.out.println("&&"); } public static void Test2(int x,int y){ if(x > 1 & y > 1) System.out.println("&"); }}
利用javap -c得到这两个方法的反汇编结果(已经加上了我的注释):
Test1:
public static void Test1(int, int); Code: 0: iload_0 //x入栈 1: iconst_1 //1入栈 2: if_icmple 18 //如果x<=1,跳到18,就是每个指令前面的字节偏移 5: iload_1 //y入栈 6: iconst_1 //1入栈 7: if_icmple 18 //如果y<=1,跳到18 10: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 13: ldc #3 // String && 15: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 18: return
可以发现如果第一个条件不满足也就是x>1为假就直接不进行下次判断了。
Test2:
public static void Test2(int, int); Code: 0: iload_0 //x入栈 1: iconst_1 //1入栈 2: if_icmple 9 //如果x<=1,跳到9 5: iconst_1 //1入栈 6: goto 10 //跳到10 9: iconst_0 //0入栈 10: iload_1 //y入栈 11: iconst_1 //1入栈 12: if_icmple 19 //如果y<=1,跳到19 15: iconst_1 //1入栈 16: goto 20 //跳到20 19: iconst_0 //0入栈 20: iand //栈顶两int型数值按位与,并且结果进栈 21: ifeq 32 //当栈顶int型数值等于0时跳转到32 24: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 27: ldc #5 // String & 29: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 32: return
可以发现及时第一个条件不满足也需要进行第二个条件的判断,最后在根据这两次判断的结果进行代码流向控制
写到这大家对&和&&在做逻辑操作时候的差异应该有了更深的认识了。
关于 | 和 || 操作符请读者们自己操作吧!
0 0
- 告诉你java在&和&&在逻辑运算上差别的原因
- java和c++在override上的差别
- Cookie在IE和Firefox上的小差别
- MySQL和SQLServer在插入数据上的差别
- Oracle和SQL SERVER在SQL语句上的差别
- snprintf 在 linux 和 windows 平台上的差别
- ArrayList和LinkList在删除性能上的差别
- Oracle和SQL SERVER在SQL语句上的差别
- 管道流在pc和Android上的差别
- 低薪和高薪能力上的差别在哪里
- x86和arm在原子操作上的差别
- EL和java代码在输出时候的差别
- 我来告诉你怎么在ophone平台上开发
- 告诉你如何在Windows上正确使用mod_wsgi
- 告诉你怎么在CSDN上给好的网站加友情链接
- 中国穷人与富人的差别:你就输在人情上
- 老婆在婚前和婚后的差别
- 穷人和富人的差别在哪里
- jquery插件fullPage.js完成全屏效果
- 斯坦福大学怎样讲“情感分析”
- HIVE 窗口及分析函数
- MongoDB第一天:MongoDB安装
- 关于BAPI_TRANSACTION_COMMIT一点说明
- 告诉你java在&和&&在逻辑运算上差别的原因
- unity飞机大战(3)ShareSDK分享功能
- 【转载】实时传输协议介绍:RTP协议介绍、RTCP协议介绍、RTSP协议介绍
- mvc表单的两种用法
- linux命令详解:
- 使用CocoaPods
- System.Web.HttpContext.Current.Session为NULL值的问题?
- 使用RemoteViews自定义Notification
- 其实他没那么喜欢你