代码如图,用equals()方法比较s1,s2,s3,s4,结果都是相等,没有重写的equals()比较的不是内存地址吗?应该和==一样才对啊?
public class Test {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String s1="imooc";
		String s2="imooc";
		String s3=new String("imooc");
		String s4=new String("imooc");
		System.out.println(s1==s2);
		System.out.println(s1==s3);
		System.out.println(s3==s4);
		if(s1.equals(s3)){
			System.out.println("equal.");
		}else{
			System.out.println("not equal.");
		}
		s1="Welcome to "+s1;
		System.out.println(s1);
			
	}
}并且,当我想重写equals()方法的时候,eclipse提示说不能重写,这又是为什么呢?
                    
                    
                5 回答
                        已采纳
                    
                                        
                         
                    
                    
                            haooooo
                            
                                
                            
                        
                        
                                                
                    TA贡献2条经验 获得超3个赞
1.Object类里面,equal方法默认是比较内存地址。Object源码:
 public boolean equals(Object obj) {
        return (this == obj);
    }String类里面重写了equals方法,比较的是字符串的值。因此值一样就返回true。
2.String类是final类型的,不能继承,不能重写。不能重写的并不是equals方法,而是String这个类本身就不能被继承
public final class String
 
                    
                    
                            妖精づ凯文
                            
                                
                            
                        
                        
                                                
                    TA贡献5条经验 获得超0个赞
String类 内部已经重写了equals()方法,因而提示不能重写,只要两个字符串的字符内容相同,就返回true,不必关心内存地址。而==就要保证内存地址也得一样。
 
                    
                    
                            qq电子时代
                            
                                
                            
                        
                        
                                                
                    TA贡献5条经验 获得超2个赞
String s2="imooc"; 与 String s3=new String("imooc");
这两个是不一样的,new 的存在就是分配地址用的,而后一种是放在常量池中的
你一下次再用这种方法去创建的时候,就会去常量池里面找,所以
String s1="imooc"; 与 String s2="imooc";
这两个是相同的,指向常量池中的"imooc"
String s3=new String("imooc"); 与 String s4=new String("imooc");
这两个是不同的地址,尽管他们的内容是一样的。
就像有两个人,他们的名字都是imooc,但是并不是一个人。
添加回答
举报
0/150
	提交
		取消
	
 
                                     
                    