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

你好,关于"equals"和"=="的区别?小白求解!

你好,关于"equals"和"=="的区别?小白求解!

烙印99 2021-05-12 14:11:13
public class ckeef{ public static void main(String args[]){ String s1,s2,s3,s4;s1=new String("we are students");s2="We are students";s3="We are students";s4=new String(s1);System.out.println(s1.equals(s2)); System.out.println(s3==s2);//s2和s3为什么是对的??System.out.println(s1.equals(s4)); System.out.println(s1==s4);//s1和s4的引用不是一样的么?为什么输出的是false??}}菜鸟求解!!!!!!
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

这个确实是容易引起混乱的,让人疑惑的。
关键在于,你要理解s1=new String("we are students");
s2="We are students";
这两个是不一样的,new是用新建一个对象的方法,而后一种是放在常量池中的。你一下次再用这种方法去创建的时候,就会去常量池里面找,所以
s2="We are students";
s3="We are students";
这两个是相同的,指向常量池中的"We are students";
而s1=new String("we are students");
s4=new String(s1);
这两个是不同的对象,尽管他们的内容是一样的。
就像有两个人,他们的名字是相同的,但是并不是一样的人。
希望能帮到你。

查看完整回答
反对 回复 2021-05-23
?
米脂

TA贡献1836条经验 获得超3个赞

public class ckeef

{ public static void main(String args[])

{
String s1,s2,s3,s4; // 定义4个引用,但未指向任何对象。

s1=new String("we are students"); //将引用s1指向新生成的string对象

s2="We are students";
/*将“We are students”字符串常量引入常量池,
并使得s2指向它。

*/

s3="We are students";
/*根据常量池存储机制,发现常量时,先搜索常量池,在该常量存在的情况下, 不会新建立一个常量来储存它,所以,s2和s3指向同一个常量“we are students”。*/

s4=new String(s1); //新建一个String使用s1内容构造,并用s4指向它。

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

System.out.println(s3==s2);//s2和s3为什么是对的??
/* S3和S2指向同一个常量,当然s3==s2,==运算符就是比较2个引用是否指向同一个 对象
*/

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

System.out.println(s1==s4);//s1和s4的引用不是一样的么?为什么输出的是false??
/*
只要new了一次,就会产生一个新的对象,所以s1和s4都产生了一个新的对象
并不是指向同一个对象的引用,而他们的string对象中的值是“we are students”常量,
String.equals()方法,会比较这个是否相等,但==是比较他们是否指向同一个
对象。

*/

}

}


查看完整回答
反对 回复 2021-05-23
  • 2 回答
  • 0 关注
  • 286 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信