这个 & 是什么意思啊 和&&啥区别啊 括号里不应该返回布尔值吗 为什么 == 0啊

这个 & 是什么意思啊 和&&啥区别啊 括号里不应该返回布尔值吗 为什么 == 0啊

if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
    appInfos.add(appInfo);
}


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

这里的&,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,所以结果可以跟0比较。判断(applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)的值,该值大于0时,表示获取的应用为系统预装的应用,反之则为手动安装的应用。为什么与0比较这就涉及到ApplicationInfo实体类的设计了,如果你感兴趣也可以去研究下底层的源码设计。

irista23 2019-02-11 11:10:36

&和&&都是逻辑与或位运算符,当其为与时是判断两边同时真则为真,否则为假;但是&&当第一个条件不成之后,后面的条件都不执行了,而&则还是继续执行,直到整个条件语句执行完为止。当&操作符两边的表达式不是boolean类型时,&表示按位与操作。另外ApplicationInfo是android.content.pm包下的一个实体类,用于封装应用的信息,flags是其中的一个成员变量用于保存应用的标志信息。这样操作相当于过滤掉了系统应用。

  • 那为什么==0啊 前面括号里不应该是true或者false吗 为啥能==0啊
    2019-02-11 12:35:13
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Android网络操作与数据存储2018版
  • 参与学习           人
  • 提交作业       307    份
  • 解答问题       1613    个

本专题是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理。介绍了Android内外部文件存储、轻量级数据库SQLite的使用。利用屏幕适配、状态保持、百度地图解决实际问题。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师