解释下这个程序的结果

Conan君 2009-10-13 01:23:34
class A
{
public static void main(String[] args)
{
Integer a = new Integer(0);
Double d = new Double(0);
Float f = new Float(0);
Long g = new Long(0);
System.out.println(a.equals(0));
System.out.println(g.equals(0));
System.out.println(d.equals(0));
System.out.println(f.equals(0));
}
}
结果:
true
false
false
false
...全文
209 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangqibing0626 2009-10-13
  • 打赏
  • 举报
回复
class A1 
{
public static void main(String[] args)
{
Integer a = new Integer(0);
Double d = new Double(0);
Float f = new Float(0);
Long g = new Long(0);
Integer b=0;
Integer c=0;
Integer e=1000;
Integer h=1000;
System.out.println(b==c);
System.out.println(e==h);
System.out.println(a.equals(0));
System.out.println(g.equals(0L));
System.out.println(d.equals(0.0));
System.out.println(f.equals(0F));
}
}

true
false
true
true
true
true
添加了一点···
jacon1984 2009-10-13
  • 打赏
  • 举报
回复
学习学习~
liaojingzh 2009-10-13
  • 打赏
  • 举报
回复
千奇百怪,什么都有人问啊,求学精神不错
springbird 2009-10-13
  • 打赏
  • 举报
回复
学习了
jarvis_java 2009-10-13
  • 打赏
  • 举报
回复
装箱 学习了
lz12366007 2009-10-13
  • 打赏
  • 举报
回复
其实就是自动包装 的结果
在网上给你找了点资料

在JDK1.5之前,我们总是对集合不能存放基本类型而耿耿于怀,现在自动转换机制
解决了我们的问题。

int a = 3;
Collection c = new ArrayList();
c.add(a);//自动转换成Integer.

Integer b = new Integer(2);
c.add(b + 2);

 这里Integer先自动转换为int进行加法运算,然后int再次转换为Integer.
这样对我我们编程是不是很方便

http://hi.baidu.com/suofang/blog/item/73e42273b9e5171d8701b058.html
这个链接解释的很详细
qjcslgnhwayagain 2009-10-13
  • 打赏
  • 举报
回复
类型不同啊
weiruantwo 2009-10-13
  • 打赏
  • 举报
回复
又学习了
zhuyang7654321 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 soleisure 的回复:]
经过自动装箱后a = 0, d = 0.0, f = 0.0f, g = 0l
所以只有第一条是true的
这是jdk1.5的新特性

[/Quote]

恩,说得好。
cuiwensheng_0726 2009-10-13
  • 打赏
  • 举报
回复
呵呵,见教了!
li_willian114 2009-10-13
  • 打赏
  • 举报
回复
顶~~~~
longq121 2009-10-13
  • 打赏
  • 举报
回复
顶了,不错!值得学习!
cwjieNo1 2009-10-13
  • 打赏
  • 举报
回复
Java默认输入的参数是int型的,是true说明0是整形的
a.equals(0));
System.out.println(g.equals(0L));
System.out.println(d.equals(0.0));
System.out.println(f.equals(0F));
这样才是正确的。
快乐的2 2009-10-13
  • 打赏
  • 举报
回复
Java默认情况输入不带小数点的数字为int类型,而int类型封装类为Integer,这样就可以解释那样的结果了.
Emiya_wang 2009-10-13
  • 打赏
  • 举报
回复
学习了
downice 2009-10-13
  • 打赏
  • 举报
回复
0默认是int,Integer在 -128~127之间时,用equars可以在int和Integer之间返回true。
关于你的false,无关的2个类用equars,无论如何都是false。
bigbro001 2009-10-13
  • 打赏
  • 举报
回复
因为0的字面量是int,下面每一个equals方法首先比较的是类型是否相同,然后才是值是否相同
所以最终只有Integer型的比较结果为true
如果把代码稍作修改:

class A
{
public static void main(String[] args)
{
Integer a = new Integer(0);
Double d = new Double(0);
Float f = new Float(0);
Long g = new Long(0);
System.out.println(a.equals(0));
System.out.println(g.equals(0L));
System.out.println(d.equals(0.0));
System.out.println(f.equals(0F));
}
}

如果做如上修改,那么打印结果就是:
true
true
true
true
swandragon 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 justinavril 的回复:]
就简单解释一下Double的情况为什么是不一样的吧:
看一下源码,对于Double的equals的实现:
Java codepublicboolean equals(Object obj) {return (objinstanceof Double)&& (doubleToLongBits(((Double)obj).value)==
doubleToLongBits(value));
}
如果返回TRUE,obj是一个Double型的对象,而0不是。如果你换成0.0那么返回就是TRUE了。

同样可以解释Long和Float的情况。
[/Quote]

UP
SoLeisure 2009-10-13
  • 打赏
  • 举报
回复
经过自动装箱后a = 0, d = 0.0, f = 0.0f, g = 0l
所以只有第一条是true的
这是jdk1.5的新特性
portnet 2009-10-13
  • 打赏
  • 举报
回复
这个自己看下源代码不就得了。
加载更多回复(4)

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧