猿问

Java入门第三季,2-2,我用equals()方法来测验左边知识点代码时的疑问?

代码如图,用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提示说不能重写,这又是为什么呢?

Java_Hello_World
浏览 1535回答 5
5回答

haooooo

1.Object类里面,equal方法默认是比较内存地址。Object源码: public boolean equals(Object obj) {         return (this == obj);     }String类里面重写了equals方法,比较的是字符串的值。因此值一样就返回true。2.String类是final类型的,不能继承,不能重写。不能重写的并不是equals方法,而是String这个类本身就不能被继承public final class String

36925814

String类  内部已经重写了equals()方法,因而提示不能重写

rookie2maven

String 为final类型无法继承所以无法重写。

妖精づ凯文

String类  内部已经重写了equals()方法,因而提示不能重写,只要两个字符串的字符内容相同,就返回true,不必关心内存地址。而==就要保证内存地址也得一样。

qq电子时代

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,但是并不是一个人。
随时随地看视频慕课网APP

相关分类

Java
我要回答