class A
{
int a=1;
}
public class p142
{
public static void main(String args[])
{
A obj1=new A();
A obj2=new A();
String s1,s2,s3="abc",s4="abc";
s1=new String("abc");
s2=new String("abc");
System.out.println("s1.equals(s2)是"+(s1.equals(s2)));
System.out.println("s1==s3是"+(s1==s3));
System.out.println("s1.equals(s3)是"+(s1.equals(s3)));
System.out.println("s3==s4是"+(s3==s4)); //我觉得s3!=s4,因为不是指向同一首地址
System.out.println("s2.equals(s3)是"+(s2.equals(s3)));
System.out.println("s1==s2是"+(s1==s2));
System.out.println("obj1==obj2是"+(obj1==obj2));
System.out.println("obj1.equals(obj2)是"+(obj1.equals(obj2))); //这里我觉得
//应该是相同的吧,内容一样啊/
obj1=obj2;
System.out.println("obj1=obj2后obj==obj2是"+(obj1==obj2));
System.out.println("obj1=obj2后obj1.equals(obj2)是"+(obj1.equals(obj2)));
}
}
(1)s3="abc",s4="abc";
这样赋值的String 对象 在java里面会先去查看一个String的常量池
如果已经创建了 ,则不再重复创建,直接指向常量池中的那个已经存在对象
s3 已经在常量池中创建了,所以s4也指向s3的那个对象
(2)equeals方法是Object的方法 默认是 按照 内存地址比较
除非你重写
public boolean equals(Object obj) {
return (this == obj);
}
上面是Object中equals方法,可以看到如果你不在A中重写这个方法
就会默认按照地址比较