为了账号安全,请及时绑定邮箱和手机立即绑定

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

正在回答

5 回答

System.out.println(s1.equals(s2));

System.out.println(s1.equals(s3));

System.out.println(s3.equals(s4));

true

false

false

true

true

true

Welcome to imooc


0 回复 有任何疑惑可以回复我~

谢谢楼上两位的回复,我好像搞清楚了问题的所在。

对于引用数据类型,equals()方法比较的是对象的地址;

而对于基本数据类型,equals()比较的就是数值。我的例子中,s1, s2...都是字符串常量,是基本数据类型。

1 回复 有任何疑惑可以回复我~

默认的equals();方法比较的是对象里面的内容(值)

0 回复 有任何疑惑可以回复我~

equals在object里是比较内存地址的,这代码我试了,去到eclipe里右键--source-Override--选equals,

自己在改写一下方法体,

0 回复 有任何疑惑可以回复我~

equals方法比较的是值

0 回复 有任何疑惑可以回复我~
#1

Java_Hello_World 提问者

equals方法没有重写的时候比较的不也是内存地址吗? 刚才我有去重看了下那一节。 或者说,这个例子跟Java入门第二季3-9的例子有何本质的不同呢?
2016-03-20 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

我用equals()方法来测验左边知识点代码时的疑问。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信