日期:2014-05-20  浏览次数:20899 次

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

------解决方案--------------------
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
------解决方案--------------------
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;