【小细节】Integer(包装类型)数据比较

losetowin 发布于:2015-11-17 22:33 分类:Java  有 3447 人浏览,获得评论 5 条 标签: java Integer 

本文地址:http://www.dutycode.com/xiaoxijie_java_integer_bijiao.html
除非注明,文章均为 www.dutycode.com 原创,欢迎转载!转载请注明本文地址,谢谢。

直接上代码吧,先不要放到IDE里面去编译执行,先看下,会输出什么结果

public class CompareExample {

	public static void main(String[] args) {
		
		Integer num1 = new Integer(100);
		Integer num2 = new Integer(100);
		
		System.out.println(num1 == num2);
		System.out.println(num1 > num2);
		System.out.println(num1 < num2);
		
	}
	
}


执行结果是什么?
打印的结果是:false false false
答对了吗?

答对的请忽略下面的解释, 答错的。。。乖乖看看~~

第一个: num1 == num2
这里很容易因为是true,因为100=100嘛,肯定是true了,但是—> 这里是Integer,不是int哦,num1和num2实际上是Integer的对象,并且,java中的==是用于判断两个操作数是否相等的,如果操作数是基本数据类型,则判断值是否相等;如果操作数是对象,则判断两个对象的地址是否相等(也就是引用是否相等),所以,这里就很明确了,num1 和num2是两个对象,自然地址是不一样的,所以肯定是false

第二个和第三个 num1>num2 或者num1<num2
按照第一个的解释,你可能对这俩有点持怀疑态度了,难道这俩也是看地址?那怎么比较地址大小呢?
Java中,>和< 用来判断两个数字类型的大小(PS:注意,必须是数字类型的),Integer本身是int的包装类型,在使用>或者< 比较的时候,默认就会调用Integer的intValue()方法了,所以最终的比较就是两个基本数据类型之间的比较,所以,肯定是false了。

总结:
     如何比较Integer类型的数字呢?
          使用Integer里面的compareTo方法,就可以解决上面的问题了(PS:当然你也可以自己去实现一个compareTo方法,不过,似乎有点重复造轮子了。。。) , 其他包装类型同理。


版权所有:《攀爬蜗牛》 => 《【小细节】Integer(包装类型)数据比较
本文地址:https://www.dutycode.com/xiaoxijie_java_integer_bijiao.html
除非注明,文章均为 《攀爬蜗牛》 原创,欢迎转载!转载请注明本文地址,谢谢。