求java大神们戳进,看看这段代码如何做内存分析?很急。。。。。

上帝爱众生 发布于 2015/04/10 10:14
阅读 225
收藏 0
public class aa {
public static void main(String[] args){
User u=new User(19,"das");
User u2=new User(19,"das");
User a=u;
User b=u2;
if(a.equals(b)){
System.out.println("czxcz");
}
}
}
class User{
int age;
String name;
User(int age,String name){
this.age=age;
this.name=name;
}

}

我们知道“==”和“equals”,前者比较的是变量所指向内存中所存储的数据是否相同,后者用来比较两个独立对象的内容是否相同,

下面的User a和b,这两个对象分别指向的是u和u2,而u和u2又分别指向了new出来的不同内存空间,所以我可以理解为a和b也是指向那new出来的两块内存吗?在这个过程中只开辟了两块对内存存储new出来的两个对象,这两个对象内容是一样的(个人理解,不知道对不对,求判断~)

那么问题来了,如上段代码,u和u2分别指向了new出来一块内存,new出来的这两块内存中的值肯定是相同的,那么为什么u.equals(u2)的返回值是false?


加载中
1
月影南溪
月影南溪
默认的equals方法的实现是 a==b ,也就是说,如果没有重写equals方法比较的还是 ‘是不是一个地址’这件事
月影南溪
月影南溪
@来自爪哇岛的程序猿 哈哈,客气客气
上帝爱众生
上帝爱众生
就你这个答案让我茅塞顿开啊!
0
szgaea
szgaea
需要实现equals方法
上帝爱众生
上帝爱众生
回复 @maradona : String类型的可以通过equals判断内存空间值是否相同是不是因为java在定义String时就已经重写了String方法?
maradona
maradona
回复 @来自爪哇岛的程序猿 : 但不能说实现,应该叫重写,发现俺教条了
maradona
maradona
回复 @来自爪哇岛的程序猿 : 他说的很对~
上帝爱众生
上帝爱众生
什么?equals方法貌似是java内部自带的方法吧。。。
0
s
sami110
那个两个对象肯定不等啊,除非你用单列模式
上帝爱众生
上帝爱众生
回复 @sami110 : 是不是java在定义String的时候为它重写了equals方法呢?
szgaea
szgaea
回复 @来自爪哇岛的程序猿 : string是特殊对象,可以看看他的文档
s
sami110
String de equals 和 object的 equals的意义不一样 自己重新equals试试看吧
上帝爱众生
上帝爱众生
可是为什么我String s=new String("sfa");这个却可以用来判断啊?
0
w
worldown
自己的类要重写equals方法,不然就会调用Object中的equals,Object中的是==作比较的
0
mynawang
mynawang
User u=new User(19,"das");
User u2=new User(19,"das");
User a=u;
User b=u2;

System.out.println(a);

System.out.println(b);



string a="123";

string b="123";

System.out.println(a);

System.out.println(b);


返回顶部
顶部