1700440546
1700440547
竟然是3个false,也就是说两个值之间不等,也没大小关系,这也太奇怪了吧。不奇怪,我们来一一解释。
1700440548
1700440549
i==j
1700440550
1700440551
在Java中“==”是用来判断两个操作数是否有相等关系的,如果是基本类型则判断值是否相等,如果是对象则判断是否是一个对象的两个引用,也就是地址是否相等,这里很明显是两个对象,两个地址,不可能相等。
1700440552
1700440553
i>j和i<j
1700440554
1700440555
在Java中,“>”和“<”用来判断两个数字类型的大小关系,注意只能是数字型的判断,对于Integer包装类型,是根据其intValue()方法的返回值(也就是其相应的基本类型)进行比较的(其他包装类型是根据相应的value值来比较的,如doubleValue、floatValue等),那很显然,两者不可能有大小关系的。
1700440556
1700440557
问题清楚了,修改总是比较容易的,直接使用Integer实例的compareTo方法即可。但是这类问题的产生更应该说是习惯问题,只要是两个对象之间的比较就应该采用相应的方法,而不是通过Java的默认机制来处理,除非你确定对此非常了解。
1700440558
1700440559
1700440560
1700440561
1700440563
编写高质量代码:改善Java程序的151个建议 建议28:优先使用整型池
1700440564
1700440565
上一建议我们解释了包装对象的比较问题,本建议将继续深入讨论相关问题,首先看如下代码:
1700440566
1700440567
public static void main(String[]args){
1700440568
1700440569
Scanner input=new Scanner(System.in);
1700440570
1700440571
while(input.hasNextInt()){
1700440572
1700440573
int ii=input.nextInt();
1700440574
1700440575
System.out.println(”\n====”+ii+“的相等判断======”);
1700440576
1700440577
//两个通过new产生的Integer对象
1700440578
1700440579
Integer i=new Integer(ii);
1700440580
1700440581
Integer j=new Integer(ii);
1700440582
1700440583
System.out.println(“new产生的对象:”+(i==j));
1700440584
1700440585
//基本类型转为包装类型后比较
1700440586
1700440587
i=ii;
1700440588
1700440589
j=ii;
1700440590
1700440591
System.out.println(“基本类型转换的对象:”+(i==j));
1700440592
1700440593
//通过静态方法生成一个实例
1700440594
1700440595
i=Integer.valueOf(ii);
[
上一页 ]
[ :1.700440546e+09 ]
[
下一页 ]