如题
另外:
System.out.println(new Long(3).equals(3l));为什么为true?
System.out.println(new Long(3).equals(3));为什么为false?

解决方案 »

  1.   

    System.out.println(3L == 3f) 基本数值对比,都是 3 所以 true
    System.out.println(new Long(3).equals(3l)); 3l 被包装成 Long 再比值 所以 true
    System.out.println(new Long(3).equals(3)); 3 被包装成 Integer,equals 方法中先对类型比较,类型不同,所以 false
      

  2.   


    多谢大哥回复。
    比较对象时,==表示对象引用是否相同,equals表示对象的值是否相等。
    如果比较数据类型,==和equals有何区别呢?
      

  3.   

    1、如果是基本类型比较,那么只能用==来比较,不能用equals(比较数值)
    2、对于基本类型的包装类型,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用变量,==是比较地址的(即是否是同一个引用),而equals是比较内容的
    3、对于String类型,“==”比较两个变量本身的值,即两个对象在内存中的首地址。“equals()”比较字符串中所包含的内容是否相同。
    System.out.println(3L == 3f) JAVA会进行类型提升,都提升到L.进行数值比较,结果为true.
    System.out.println(new Long(3).equals(3l)); 基本类型long被包装成Long.进行内容的比较(包括类型比较)。返回true.
    System.out.println(new Long(3).equals(3)); 3被包装成Long.进行内容比较(包括类型比较),返回false;
      

  4.   

    Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。 
      

  5.   

    好好看看“==”和equals的适用范围这个你就懂了。