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. PowerDesigner 逆向工程 从SQL文件转换成PDM 从PDM转成CDM

    从SQL文件逆向工程到PDM: ①选择file -> Reverse Engineer - > Database ②在General选项卡中选择MySQL数据库,点击确定. ③using ...

  2. hdu1162Eddy's picture

    http://acm.hdu.edu.cn/showproblem.php?pid=1162 最小生成树 #include<iostream> #include<stdio.h> ...

  3. Project Euler 83:Path sum: four ways 路径和:4个方向

    Path sum: four ways NOTE: This problem is a significantly more challenging version of Problem 81. In ...

  4. 欧拉工程第61题:Cyclical figurate numbers

    ---恢复内容开始--- 题目链接 从三角数开始,循环到八角数,再到三角数,求这6个数的和 这个比较复杂,代码在网上找的 Java: package project61; import java.ut ...

  5. spring @bean注解

    1.@bean注解用于注册一个bean到 到ioc容器中.类似于@component注解 2.@configure注解,相当于指明这个类是配置文件 3.@bean还可以指定initMethod,des ...

  6. sed and awk学习笔记

    sed and awk 背景 awk起源追溯至sed和grep,进而追溯至共同的行编辑器ed.实用工具grep来源于ed命令:g/re/p .实用工具awk和sed有一个共同的选项-f用于指定脚本的名 ...

  7. Delphi 中的 procedure of object (类方法存在一个隐藏参数self),简单深刻 good

    其实要了解这些东西,适当的学些反汇编,WINDOWS内存管理机制,PE结构,看下李维的VCL架构剖析可以很好理解type TMyEvent = procedure of object;这是一种数据类型 ...

  8. MVVM 代码记录

      一.XML <Page x:Class="MVVM.MainPage" xmlns="http://schemas.microsoft.com/winfx/20 ...

  9. VS2010/MFC编程入门教程之目录和总结

    鸡啄米的这套VS2010/MFC编程入门教程到此就全部完成了,虽然有些内容还未涉及到,但帮助大家进行VS2010/MFC的入门学习业已足够.以此教程的知识为基础,学习VS2010/MFC较为深入的内容 ...

  10. 项目SVN的IP地址发生变化时修改SVN为新的IP地址

    在eclipse或者Myeclipse自带的svn:subclipse中修改ip地址 项目开发中有可能要修改SVN的IP地址,entries文件里面包含svn服务器的地址信息.每个文件夹都会产生一个e ...