ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Java基本类型及封装类比较

Java基本类型及封装类比较

原创 Linux操作系统 作者:xinglongjian 时间:2009-12-01 11:20:41 0 删除 编辑

碰到这样一道题:

Integer i = new Integer (42);
Long l = new Long (42);
判断 l.equals(i) 或者i.equals(l)为true or false?

经过测试二者都为false,究其原因其实很简单,因为Integer和Long属于基本类型的包装类,这两个类重写了equals()方法,代码如下:

Integer

 public boolean equals(Object obj) {
 if (obj instanceof Integer) {
     return value == ((Integer)obj).intValue();
 }
 return false;
    }

Long

 public boolean equals(Object obj) {
 if (obj instanceof Long) {
     return value == ((Long)obj).longValue();
 }
 return false;
    }

因此,在调用equals()方法是,首先判断是不是对应的类型,如果是,再比较值是不是一样,否则直接返回false。

总结:

任何编程语言都会涉及比较大小的运算,对于基本类型,Java语言采取与C/C++相同的方法,不用new来创建变量,而是创建一个不是引用的自动变量,这个变量拥有“值”。在进行比较时有两种方法:“==” 和equals();

1,==

基本类型的比较,是比较值大小。

对象的比较 ,是比较对象在内存中的地址。

2,equals()

用来比较两个对象是否相等,如果是自定义的类,在没有重写equals()时,也是比较的内存地址,因为Object类的equals()方法的内部实现是用“==”来实现的。只有重写equals(),按照自己的意愿去定义这个类的相等规则,才能实现真正意义上的比较,另外要记住,在重写equals()时,要重写hashcode()。         

 

 

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7464531/viewspace-621067/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-09-25

  • 博文量
    7
  • 访问量
    19756