提问一个java的问题:是有关equals()和==的,问题如下
publicstaticvoidmain(String[]args){Integera=newInteger(1);Integerb=newInteger(1);intc...
public static void main(String[] args) {
Integer a=new Integer(1);
Integer b=new Integer(1);
int c=1;
Long d=new Long(1);
System.out.println(a.equals(b));
System.out.println(a.equals(c));
System.out.println(b.equals(c));
System.out.println(a.equals(d));
System.out.println("-----------------------");
System.out.println(a==b);
System.out.println(a==c);
System.out.println(b==c);
}
运行结果是
true
true
true
false
-----------------------
false
true
true
这就怪了,a==c为true,b==c为true,a==b怎么就为false了呢?还有为什么a.equals(d)为false呢? 展开
Integer a=new Integer(1);
Integer b=new Integer(1);
int c=1;
Long d=new Long(1);
System.out.println(a.equals(b));
System.out.println(a.equals(c));
System.out.println(b.equals(c));
System.out.println(a.equals(d));
System.out.println("-----------------------");
System.out.println(a==b);
System.out.println(a==c);
System.out.println(b==c);
}
运行结果是
true
true
true
false
-----------------------
false
true
true
这就怪了,a==c为true,b==c为true,a==b怎么就为false了呢?还有为什么a.equals(d)为false呢? 展开
23个回答
展开全部
equals()是判定字符串相等,用在两者都是String类型时;
==是判定数值相等。
==是判定数值相等。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将此程序编译之后,反编译变为
Integer a = new Integer(1);
Integer b = new Integer(1);
int c = 1;
Long d = new Long(-5170845727634489343L);
System.out.println(a.equals(b));
System.out.println(a.equals(Integer.valueOf(c)));
System.out.println(b.equals(Integer.valueOf(c)));
System.out.println(a.equals(d));
System.out.println("-----------------------");
System.out.println(a == b);
System.out.println(a.intValue() == c);
System.out.println(b.intValue() == c);
equals时比的都是对象,需要自动打包,所以equals为true。而Long类型不属于Integer所以false,具体可看源码。
而第一个==是比较两个引用的对象,不是同一个,所以false,
下面的==都先自动转成int再比较值,值相等,所以true。
Integer a = new Integer(1);
Integer b = new Integer(1);
int c = 1;
Long d = new Long(-5170845727634489343L);
System.out.println(a.equals(b));
System.out.println(a.equals(Integer.valueOf(c)));
System.out.println(b.equals(Integer.valueOf(c)));
System.out.println(a.equals(d));
System.out.println("-----------------------");
System.out.println(a == b);
System.out.println(a.intValue() == c);
System.out.println(b.intValue() == c);
equals时比的都是对象,需要自动打包,所以equals为true。而Long类型不属于Integer所以false,具体可看源码。
而第一个==是比较两个引用的对象,不是同一个,所以false,
下面的==都先自动转成int再比较值,值相等,所以true。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为Integer是int的封装类,==比较的是两个引用是不是指向同一个内存地址,equals比较的是两个引用的字面值是不是相同 所以a==b为false 因为d的类型是长整型 与a的类型并不同 之间存在拆箱和装箱的问题 所以a.equals(d)为false
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
==用来比较基本数据类型的时候比的是值是否相等
==用来比较对象的时候比的是对象的地址是否相同
equals比较对象的内容是否相等
==用来比较对象的时候比的是对象的地址是否相同
equals比较对象的内容是否相等
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
同意
713lib
的回答。
简单的说就是。有的值在堆中存放有的在栈存放。所以比较时取值的范围不同。结果不同
713lib
的回答。
简单的说就是。有的值在堆中存放有的在栈存放。所以比较时取值的范围不同。结果不同
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询