两个Integer类型数值比较大小的坑
先看一段代码:
1 Integer number = 127; 2 Integer number2 = 127; 3 Integer number3 = 128; 4 Integer number4 = 128; 5 if (number == number2) { 6 System.out.println("Integer 取值在-128~127中,用'=='比较两个值是否相等可行"); 7 }else{ 8 System.out.println("Integer 取值在-128~127中,用'=='比较两个值是否相等不可行"); 9 } 10 if (number3 == number4) { 11 System.out.println("Integer 取值在-128~127中,用'=='比较两个值是否相等可行"); 12 }else{ 13 System.out.println("Integer 取值在-128~127中,用'=='比较两个值是否相等不可行"); 14 } 15 16 // 输出结果: 17 // Integer 取值在-128~127中,用'=='比较两个值是否相等可行 18 // Integer 取值在-128~127中,用'=='比较两个值是否相等不可行
由此可以看出 , Integer取值在-128~127范围内时 , 可以用 "==" 比较是否相等 . 因为 "==" 比较的对象地址的引用 , 又因为在这个范围内, 是在常量池中取的值 , 并没有重新的new对象 , 所以是可以用 "==" 比较.
当大于这个范围后就会重新new对象 , 所以比较两个Integer是否相等就需要用compareTo .
1 Integer number5 = 888888; 2 Integer number6 = 888888; 3 if (number5.compareTo(number6) == 0) { 4 System.out.println("Integer 大于-128~127这个范围,用'compareTo'比较两个值相等可行"); 5 } else { 6 System.out.println("Integer 大于-128~127这个范围,用'compareTo'比较两个值相等不可行"); 7 } 8 9 // 输出结果: 10 // Integer 大于-128~127这个范围,用'compareTo'比较两个值相等可行
如果一个int类型和一个Integer类型比较是否相等, 可以用 "=="
1 int number7 = 126; 2 Integer number8 = 126; 3 4 if (number7 == number8.intValue()) { 5 System.out.println("一个int类型和一个Integer类型用'=='比较是否相等,可行"); 6 } else { 7 System.out.println("一个int类型和一个Integer类型用'=='比较是否相等,不可行"); 8 } 9 10 // 输出结果: 11 // 一个int类型和一个Integer类型用'=='比较是否相等,可行
总结:
1. 如果两个int 类型的数值比较相等可以直接使用 "==" .
2. 如果两个Integer类型的数值比较相等在-128~127之间的可以用 "=="比较 , 否则用compareTo比较 .
3. 如果一个int类型和一个Integer类型数值比较是否相等可以用 "==" .