1700438490
1700438491
若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换,int类型转换为long类型,long类型转换为float类型等。
1700438492
1700438493
若两个操作数中有一个是数字S,另外一个是表达式,且其类型标示为T,那么,若数字S在T的范围内,则转换为T类型;若S超出了T类型的范围,则T转换为S类型(可以参考“建议22”,会对该问题进行展开描述)。
1700438494
1700438495
若两个操作数都是直接量数字(Literal)[1],则返回值类型为范围较大者。
1700438496
1700438497
知道是什么原因了,相应的解决办法也就有了:保证三元操作符中的两个操作数类型一致,即可减少可能错误的发生。
1700438498
1700438499
[1]“Literal”也译作“字面量”。
1700438500
1700438501
1700438502
1700438503
1700438505
编写高质量代码:改善Java程序的151个建议 建议4:避免带有变长参数的方法重载
1700438506
1700438507
在项目和系统的开发中,为了提高方法的灵活度和可复用性,我们经常要传递不确定数量的参数到方法中,在Java 5之前常用的设计技巧就是把形参定义成Collection类型或其子类类型,或者是数组类型,这种方法的缺点就是需要对空参数进行判断和筛选,比如实参为null值和长度为0的Collection或数组。而Java 5引入变长参数(varags)就是为了更好地提高方法的复用性,让方法的调用者可以“随心所欲”地传递实参数量,当然变长参数也是要遵循一定规则的,比如变长参数必须是方法中的最后一个参数;一个方法不能定义多个变长参数等,这些基本规则需要牢记,但是即使记住了这些规则,仍然有可能出现错误,我们来看如下代码:
1700438508
1700438509
public class Client{
1700438510
1700438511
//简单折扣计算
1700438512
1700438513
public void calPrice(int price, int discount){
1700438514
1700438515
float knockdownPrice=price*discount/100.0F;
1700438516
1700438517
System.out.println(“简单折扣后的价格是:”+formateCurrency(knockdownPrice));
1700438518
1700438519
}
1700438520
1700438521
//复杂多折扣计算
1700438522
1700438523
public void calPrice(int price, int……discounts){
1700438524
1700438525
float knockdownPrice=price;
1700438526
1700438527
for(int discount:discounts){
1700438528
1700438529
knockdownPrice=knockdownPrice*discount/100;
1700438530
1700438531
}
1700438532
1700438533
System.out.println(“复杂折扣后的价格是:”+formateCurrency(knockdownPrice));
1700438534
1700438535
}
1700438536
1700438537
//格式化成本的货币形式
1700438538
1700438539
private String formateCurrency(float price){
[
上一页 ]
[ :1.70043849e+09 ]
[
下一页 ]