`
MarilynTyson
  • 浏览: 39343 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

读<<Java解惑>>后的碎嘴子(第三章)

阅读更多
第三章--循环问题

24.
for (byte b = Byte.MIN_VALUE; b < Byte.MAX_VALUE; b++) {
	if (b == 0x90)
	System.out.print("Joy!");
}
结果是什么也没打,不要被迷惑,十六进制的90虽然是8位,产生了byte本身也是8位能装下不溢出的错觉,但是byte作为有符号整数表示范围是-128~127,负数最高位是1
总结:本身没有什么特别的,但本条内容再现了bloch大师最具特色的头脑风暴

25.
int j=0;
for(int i=0;i<100;i++)
   	j = j++;
System.out.println(j);

结果是0而不是100,这个猛一看还是挺糊弄人的,其实本质把j++当作一个表达式看就明白了,它永远会返回未自增前的0值,这样重复了100次,把j++改成++j肯定可以解决,但是IDE会嘲笑你在做一个很二的操作
总结:再基础的东西都会使人犯错,不要小看这些基本元素

26.
int count = 0;
for(int i=Integer.MAX_VALUE-100; i<=Integer.MAX_VALUE; i++)
       count++;
System.out.println(count);
结果是100?还是101?结果是死循环,原因很简单,当i被加成Integer.MAX_VALUE时,再加一次就溢出了,直接变成了Integer.MIN_VALUE,如此往复
总结:不要打这些边界值的想法

27.
int i = 0;
while (-1 << i != 0)
   	i++;
System.out.println(i);

结果是32?结果还是死循环,int的-1二进制表示是32个1,当i==32时-1<<32的结果是-1而不是0,原因就一句,任何类型不可能移走和原类型本身一样的位数(如int型不能移动32位,最多31位,long不能移动64位,最多63位)
总结:bit位移什么的,最讨厌了

28.
while(i==i+1){}

i为何值,死循环成立?答案有很多,之一是无穷大的浮点数如Double.POSITIVE_INFINITY,按照数学的说法无穷大+1还是无穷大,按照大师的说法则是当一个浮点数足够大,在其上加减值是可能不会影响返回值的,这想想是可以理解的,不能把思考整数的习惯思维用在浮点数上
总结:二进制浮点数只是返回近似值

29.
while(i != i){}

i为何值,死循环成立?答案是Double.NaN,一句话它不等于任何值,包括它自己
总结:在含0乘除计算中,尤其是除数或者被除数有0,或0.0时,根据int和double等参与类型,会相应返回Double.POSITIVE_INFINITY,Double.NaN等值,放在实际业务方法里带来的bug足以让你喝一壶(这个曾经可是有着深刻的体会)

30.
while (i != i + 0) {}

i为何值,死循环成立?附加条件是i不能是float或double,答案是任何字符串,这样+符号会被重载,数字0也会被当作字符串从而和i拼接到一起
总结:大师也懂得轻松一刻

31.
while (i != 0) {
	i >>>= 1;
}

i为何值,死循环成立?答案是任何short,byte的负数,如short i = -1,二进制为16个1,重点在于short,byte,char进入循环会有一个神奇的int转换,i会被当作32个1来操作,经过无符号右移最高位变成了0,然后赋值回i(别忘了i是short类型),所以还会有一次窄化赋值,只保留了后16位,等于还是16个1,被右移的高16位被无情的扔掉了
总结:不要在short,byte,char上执行这样的复合赋值,小心自动窄化

32.
while (i <= j && j <= i && i != j) {}

i为何值,死循环成立?答案是任何基本包装类型,如Integer i = new Integer(0);Integer j = new Integer(0);不过当然只限于5.0版本以后,这里auto-boxing在起作用,当遇到<=这样的比较符号时,会自动将对象解包成基本类型,

这样前两个表达式为true,但是当遇到==或!=时便不会解包,比较将是内存位置,毕竟Integer是new出来的,这样i!=j会返回true
总结:如果改成Integer i = 0;Integer j = 0;i!=j还成立吗?大师对于new是否存在,使用值相等或引用相等的规律并没有作头脑风暴,自行参考auto-boxing内部原理吧

33.
while (i != 0 && i == -i) {}

i为何值,死循环成立?答案是Integer.MIN_VALUE或Long.MIN_VALUE,为什么没有byte和short?关键还是自动转型,本条在大师的叙述中还有很多值得学习思考的地方
总结:一元减号操作符用在一个非数值型上是非法的,没有任何浮点数等于其符号位反转之后的值,牢记有符号整数采用的是补码计算法,以及各个整数表示范围中,负数比正数要多一个,因为0被排除了,这样多出来的那个负数便有了其特殊性

34.
int START = 2000000000;
int count = 0;
for (float f = START; f < START + 50; f++)
         count++;

完毕后count会是什么呢?这一看就是有问题的,谁也不会使用float作为循环索引,根据原来的经验,浮点数足够大,加1并不会使它改变,所以答案是死循环吗?答案是0,循环没有执行,因为f < START + 50不成立,很简单,f并不是2000000050
总结:可以顺便复习一下for的执行顺序,float和short这样的东西,除非特殊环境下(嵌入式?),否则不应该出现在的任何应用里了

35.
int minutes = 0;
for (int ms = 0; ms < 60*60*1000; ms++){
if (ms % 60*1000 == 0)
	minutes++;
   }
完毕后minutes会是什么呢?答案是60000,大师不教你也能看出来了,取余(%)的优先级和乘法(*)优先级是一样的,顺序会从左到右计算
总结:不要吝啬用括号,最后一条让你从无数个死循环中轻松一下,总体本章还是比较有意思的
0
0
分享到:
评论

相关推荐

    vb图书馆管理系统(源代码+论文)(20245j).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    VB通用C++试题库系统的设计与开发(论文+源代码)(2024af).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    ASP.NETRSA可视化算法程序的实现与研究(源代码+论文)(2024rs).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    2020数学建模国赛C题-银行对中小微企业信贷决策模型构建与应用(源码+全部资料).zip

    2020数学建模国赛C题-银行对中小微企业信贷决策模型构建与应用(源码+全部资料).zip 【资源说明】 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 6、欢迎下载,沟通交流,互相学习,共同进步!

    vb人事工资管理系统毕业设计(论文+源代码+答辩PPT)(2024x7).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    VB计算机高级语言多媒体教学演示系统(源代码+系统+开题报告)(2024em).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    ASP.NET基于BS课件发布系统(源代码+论文)(2024as).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    【未发表】基于引力搜索优化算法GSA优化集成学习结合鲁棒极限学习机RELM-Adaboost实现负荷数据回归预测算法研究附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    VB招生管理系统设计(论文+源代码)(2024rs).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    地铁客流预测项目源码及全部资料+设计文档(人工智能设计大赛交通三等奖项目成果).zip

    地铁客流预测项目源码及全部资料+设计文档(人工智能设计大赛交通三等奖项目成果).zip 【资源说明】 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 6、欢迎下载,沟通交流,互相学习,共同进步!

    vb原创图书管理系统(源代码+论文)(2024tf).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    毕设-php毕业设计-教材管理系统-操作视频2.zip

    毕设-php毕业设计-教材管理系统-操作视频2.zip

    ASP.NET公交车管理系统的实现与设计(源代码+论文)(2024py).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    VB流动资金贷款业务系统(源代码+系统+答辩PPT+开题报告+外文翻译+文献综述)(2024j5).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    毕设-PHP-[主机域名]PHP多功能域名查询系统_phpchaxun3.zip

    毕设-PHP-[主机域名]PHP多功能域名查询系统_phpchaxun3.zip

    vb学生评语生成系统论文(源代码+论文)(2024bb).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    遗传算法matlab源代码matlab实现遗传算法程序源码.zip

    遗传算法matlab源代码matlab实现遗传算法程序源码.zip,个人经导师指导并认可通过的高分大作业项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 遗传算法matlab源代码matlab实现遗传算法程序源码.zip遗传算法matlab源代码matlab实现遗传算法程序源码.zip遗传算法matlab源代码matlab实现遗传算法程序源码.zip遗传算法matlab源代码matlab实现遗传算法程序源码.zip遗传算法matlab源代码matlab实现遗传算法程序源码.zip遗传算法matlab源代码matlab实现遗传算法程序源码.zip遗传算法matlab源代码matlab实现遗传算法程序源码.zip遗传算法matlab源代码matlab实现遗传算法程序源码.zip遗传算法matlab源代码matlab实现遗传算法程序源码.zip遗传算法matlab源代码ma

    我们将使用一个具体的方程作为示例,比如求解方程 x + y + z = 10 的所有正整数解 这个脚本将包括生成解集、验证解的有效性

    求特殊方程的正整数解 下面是一个详细的Python脚本,用于求解一个特殊方程的正整数解。我们将使用一个具体的方程作为示例,比如求解方程 x + y + z = 10 的所有正整数解。这个脚本将包括生成解集、验证解的有效性、统计解的数量,并输出结果。

    labview做的曲线处理,包络线判断功能,判断准确 一个demo,有源码

    labview做的曲线处理,包络线判断功能,判断准确。 一个demo,有源码

    电子学习资料设计作品全资料单片机控制LED点阵显示器

    电子学习资料设计作品全资料单片机控制LED点阵显示器提取方式是百度网盘分享地址

Global site tag (gtag.js) - Google Analytics