http://topic.csdn.net/t/20050325/08/3879427.html

题目:
Integer   i   =   new   Integer(42)  
  Long   l   =   new   Long(42)  
  Double   d   =   new   Double(42.0)  
  下面哪些返回true  
  1:   i==l  
  2:   i==d  
  3:   l==d  
  4:i.equals(l)  
  5:i.equals(d)  
  6:l.equals(d)  
  7:i.equals(42)

答案:7;

编码验证:
  public   class   Equivalence   {  
  public   static   void   main(String[]   args)   {  
  Integer   i   =   new   Integer(42)  
  Long   l   =   new   Long(42)  
  Double   d   =   new   Double(42.0)  
  System.out.println(i==l);  
  System.out.println(i==d);
  System.out.println(l==d);  
  System.out.println(i.equals(l) );   
  System.out.println(i.equals(d) );
  System.out.println(l.equals(d) );  
  System.out.println(i.equals(42));
  }  
  }

运行结果:

1-3:编译不通过;
4-6:false
7:true

原理解释:
呵呵,我从thinking   in   java电子版中摘了一段:  
  1.   检查对象是否相等  
  关系运算符==和!=也适用于所有对象,但它们的含义通常会使初涉Java领域的人找不到北。下面是一个例子:  
   
   
  //:   Equivalence.java  
   
  public   class   Equivalence   {  
  public   static   void   main(String[]   args)   {  
  Integer   n1   =   new   Integer(47);  
  Integer   n2   =   new   Integer(47);  
  System.out.println(n1   ==   n2);  
  System.out.println(n1   !=   n2);  
  }  
  }   ///:~  
   
 
其中,表达式System.out.println(n1   ==  
n2)可打印出内部的布尔比较结果。一般人都会认为输出结果肯定先是true,再是false,因为两个Integer对象都是相同的。但尽管对象的内容
相同,句柄却是不同的,而==和!=比较的正好就是对象句柄。所以输出结果实际上先是false,再是true。这自然会使第一次接触的人感到惊奇。  

  若想对比两个对象的实际内容是否相同,又该如何操作呢?此时,必须使用所有对象都适用的特殊方法equals()。但这个方法不适用于“主类型”,那些类型直接使用==和!=即可。下面举例说明如何使用:  
   
   
  //:   EqualsMethod.java  
   
  public   class   EqualsMethod   {  
  public   static   void   main(String[]   args)   {  
  Integer   n1   =   new   Integer(47);  
  Integer   n2   =   new   Integer(47);  
  System.out.println(n1.equals(n2));  
  }  
  }   ///:~  
   
  正如我们预计的那样,此时得到的结果是true。但事情并未到此结束!假设您创建了自己的类,就象下面这样:  
   
   
  //:   EqualsMethod2.java  
   
  class   Value   {  
  int   i;  
  }  
   
  public   class   EqualsMethod2   {  
  public   static   void   main(String[]   args)   {  
  Value   v1   =   new   Value();  
  Value   v2   =   new   Value();  
  v1.i   =   v2.i   =   100;  
  System.out.println(v1.equals(v2));  
  }  
  }   ///:~

此时的结果又变回了false!这是由于equals()的默认行为是比较句柄。所以除非在自己的新类中改变了equals(),否则不可能表现出我们希
望的行为。不幸的是,要到第7章才会学习如何改变行为。但要注意equals()的这种行为方式同时或许能够避免一些“灾难”性的事件。  
  大多数Java类库都实现了equals(),所以它实际比较的是对象的内容,而非它们的句柄。

  • “==”操作符用于比较两个对象的内存地址值是否相等
  • equals() 方法用于比较两个对象的内容是否一致

我也来说说自己的认识把。  
   
  在java中内存分为   “栈”和“堆”(Stack   and   Heap)   基本数据类型存储在   "栈"中  
  对象引用类型实际存储在   "堆"中,在“栈”中只是保留引用内存的地址值,就好像知道你家门牌号码就可以找到你家。  
   
  在Java中利用"=="比较变量时候,系统使用变量在stack(栈)中所存的值来作为对比的依据,基本数据类型(int   float   double    
   
  boolean)在stack中所存的值就是其內容值,而引用类型在stack中所存放的值是本身所指向Heap中对象的地址值,而不是原先所設定的值。

IBM笔试题(_与equals的区别)的更多相关文章

  1. 001_C/C++笔试题_考察C/C++语言基础概念

    (一)文章来自:C/C++笔试题-主要考察C/C++语言基础概念.算法及编程,附参考答案 (二)基础概念 2. 头文件中的ifndef/define/endif的作用? 答:防止该头文件被重复引用. ...

  2. 007面试题__==和equals的区别

    常见面试题03: 问:==和equals的区别 1)对于基本类型而言,比较的是数值是否相等 对于引用类型而言,比较的是内存地址是否相等 2)equals:比较的是两个对象的内容是否相等

  3. 2015小米暑期实习笔试题_风口的猪-中国牛市(dp)

    风口之下.猪都能飞.当今中国股市牛市,真可谓"错过等七年". 给你一个回想历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i] ...

  4. 003_C/C++笔试题_分享大汇总

    (一)感谢:lhzstudio 01_C++经典面试题全集 50~100道 都附带有参考答案 02_C++开发工程师面试题库 100~150道 03_C++笔试题库之编程.问答题 150~200道 0 ...

  5. 002_C/C++笔试题_简单算法程序

    (一)冒泡排序法 #include <iostream> using namespace std; void bubblesort(int a[], int m); int main(vo ...

  6. 经典面试题:==和equals的区别

    1.== 既可以比较基本类型也可以比较引用类型.对于基本类型就是比较值,对于引用类型就是比较内存地址 2.equals的话,它是属于java.lang.Object类里面的方法,如果该方法没有被重写过 ...

  7. java各公司笔试题集1

    IBM笔试题 注:IBM笔试题一小时之内完成,题目全部用英文描述,这里用中文表述 一.名词解释 1.Eclipse 2.J2EE 3.EJB 4.Ajax 5.Web service 二.找出以下代码 ...

  8. Java工程师笔试题整理[校招篇]

    Java工程师笔试题整理[校招篇]     隔着两个月即将开始校招了.你是不是也想借着这个机会崭露头角,拿到某些大厂的offer,赢取白富美.走上人生巅峰?当然如果你还没能打下Java基础,一定要先打 ...

  9. 百度笔试题:malloc/free与new/delete的区别(转)

    百度笔试题:malloc/free与new/delete的区别 相同点:都可以申请动态内存和释放内存. 不同点: (1) 操作对象有所不同: malloc和free是C/C++的标准库函数,new和d ...

随机推荐

  1. POJ2151Check the difficulty of problems

    题意 : 举办一次比赛不容易,为了不让题目太难,举办方往往希望能够讲出的题目满足两点,1是所有的队伍都至少能够解出一个题目,2是冠军队至少能解出确定数量的题目,最后让你求的是每个队伍至少解出一道题并且 ...

  2. hdu 1709 The Balance

    母函数的特殊情况,左右两边都可以放,如样例1,2,9 母函数为(1+x+1/x)*(1+x^2+1/x^2)*(1+x^9+1/x^9) 化简为(1+x+x^2)*(1+x^2+x^4)*(1+x^9 ...

  3. String类的使用 Part1

    String类的属性 1:Chars属性 获取当前 String 对象中位于指定位置的 Char 对象. 2:Length属性 获取当前 String 对象中的字符数. eg:获取字符串中  字母, ...

  4. 李洪强漫谈iOS开发[C语言-037]-if else 语句

    李洪强漫谈iOS开发[C语言-037]-if else 语句

  5. stringUtils是apache下的Java jar补充包

    org.apache.commons.lang.StringUtils StringUtils中一共有130多个方法,并且都是static的, 所以我们可以这样调用StringUtils.xxx().

  6. css一个图片包含多个图片|网站侧栏导航

    <html> <head><title>Hello World</title> <style> .style1{ width:60px;ma ...

  7. Java学习笔记之:java环境搭建

    一.准备工作 在学习java之前需要安装对配置java的运行环境,所以我们需要安装以下软件: 1.java jdk 2.eclipse 二.配置环境变量 1.首先,找到你刚才安装的JDK的安装目录,我 ...

  8. Servlet3.0的新特性

    注意:Servlet3.0的项目一定要使用Tomcat7.0才能看到效果!! 1.新增标注支持     在Servlet3.0的部署描述文件web.xml的顶层标签<web-app>中有一 ...

  9. taglist

    http://blog.csdn.net/duguteng/article/details/7412652 这两天看到网上有将vim 改造成功能强大的IDE的blog,突然心血来潮,亲身经历了一下. ...

  10. 【转】android UI设计的一些心得与问题解决(无效果图)

    1.把Button或者ImageButton的背景设为透明或者半透明: 半透明<Buttonandroid:background="#e0000000" ... /> ...