打字猴:1.70043844e+09
1700438440
1700438441 }
1700438442
1700438443 /*接口常量*/
1700438444
1700438445 interface Const{
1700438446
1700438447 //这还是常量吗?
1700438448
1700438449 public static fnal int RAND_CONST=new Random().nextInt();
1700438450
1700438451 }
1700438452
1700438453 RAND_CONST是常量吗?它的值会变吗?绝对会变!这种常量的定义方式是极不可取的,常量就是常量,在编译期就必须确定其值,不应该在运行期更改,否则程序的可读性会非常差,甚至连作者自己都不能确定在运行期发生了何种神奇的事情。
1700438454
1700438455 甭想着使用常量会变的这个功能来实现序列号算法、随机种子生成,除非这真的是项目中的唯一方案,否则就放弃吧,常量还是当常量使用。
1700438456
1700438457 注意务必让常量的值在运行期保持不变。
1700438458
1700438459
1700438460
1700438461
1700438462 编写高质量代码:改善Java程序的151个建议 [:1700438070]
1700438463 编写高质量代码:改善Java程序的151个建议 建议3:三元操作符的类型务必一致
1700438464
1700438465 三元操作符是if-else的简化写法,在项目中使用它的地方很多,也非常好用,但是好用又简单的东西并不表示就可以随便用,我们来看看下面这段代码:
1700438466
1700438467 public class Client{
1700438468
1700438469 public static void main(String[]args){
1700438470
1700438471 int i=80;
1700438472
1700438473 String s=String.valueOf(i<100?90:100);
1700438474
1700438475 String s1=String.valueOf(i<100?90:100.0);
1700438476
1700438477 System.out.println(“两者是否相等:”+s.equals(s1));
1700438478
1700438479 }
1700438480
1700438481 }
1700438482
1700438483 分析一下这段程序:i是80,那它当然小于100,两者的返回值肯定都是90,再转成String类型,其值也绝对相等,毋庸置疑的。恩,分析得有点道理,但是变量s中三元操作符的第二个操作数是100,而s1的第二个操作数是100.0,难道没有影响吗?不可能有影响吧,三元操作符的条件都为真了,只返回第一个值嘛,与第二个值有一毛钱的关系吗?貌似有道理。
1700438484
1700438485 果真如此吗?我们通过结果来验证一下,运行结果是:“两者是否相等:false”,什么?不相等,Why?
1700438486
1700438487 问题就出在了100和100.0这两个数字上,在变量s中,三元操作符中的第一个操作数(90)和第二个操作数(100)都是int类型,类型相同,返回的结果也就是int类型的90,而变量s1的情况就有点不同了,第一个操作数是90(int类型),第二个操作数却是100.0,而这是个浮点数,也就是说两个操作数的类型不一致,可三元操作符必须要返回一个数据,而且类型要确定,不可能条件为真时返回int类型,条件为假时返回float类型,编译器是不允许如此的,所以它就会进行类型转换了,int型转换为浮点数90.0,也就是说三元操作符的返回值是浮点数90.0,那这当然与整型的90不相等了。这里可能有读者疑惑了:为什么是整型转为浮点,而不是浮点转为整型呢?这就涉及三元操作符类型的转换规则:
1700438488
1700438489 若两个操作数不可转换,则不做转换,返回值为Object类型。
[ 上一页 ]  [ :1.70043844e+09 ]  [ 下一页 ]