RT 下面代码的结果是 false true想问下是为什么,equals()方法到底比较的是内存中的什么?public class tryit {public static void main(String[] args) {Value v1=new Value(100);Value v2=new Value(100);System.out.println(v1.equals(v2));Integer i1=new Integer(100);Integer i2=new Integer(100);System.out.println(i1.equals(i2));}}class Value{public Value(int a){i=a;} int i;}
2 回答
叮当猫咪
TA贡献1776条经验 获得超12个赞
因为你自己定义的Value类调用的equals是Object类的,此时的equals就相当于“==”;
而Integer的equals是重写了Object的equals,此时比较的是2个Integer对象的值。。。
如果你不重写equals,它比较的就是内存中的地址,也就是引用是否指向的是同一个对象。。。
如果有问题,请追问。。
希望可以帮助你
慕村9548890
TA贡献1884条经验 获得超4个赞
举个例子吧:
String a = "abc"; //不是空对象
boolean b = a.equals("abc"); //不会报错
String c = null; //空对象
boolean d = c.equals("abc"); //会报错
报不报错主要看调用equals方法的对象是不是null。
所以很多程序员会这么写程序:if ("".equals(a))...而不写成if (a.equals(""))...
原因是a有可能是null。
添加回答
举报
0/150
提交
取消