常见面试题八--s1,s2都是String对象,说说表达式s1==s2与s1.equal(s2)的区别

问题:s1,s2都是String对象,说说表达式s1==s2s1.equal(s2)的区别。

回答:

s1 == s2 s1.equals(s2)区别主要取决与两个方面,第一个方面是==操作符和equals函数之间的区别,第二个方面是String对象的特殊性。

首先,==是操作符,它的主要作用是比较两个对象之间是否是同一个,也就是说比较操作符两端的对象在对内存当中是否是同一个地址。equals函数是在Object类当中定义的函数,由于在Java当中每个类都是Object的子类,所以每个类都从Object当中继承了equals方法。在Object当中equals函数和==的作用是一样的,而我们所编写的类从原则上来讲,都应该覆写equals方法,覆写之后的equals方法是用来比较两个对象的内容是否相等。所谓的内容相等应该符合两个条件,第一个是两个对象的类型是否相等,第二是这两个对象成员变量的值是否相等。

其次,String类的对象可以直接使用字面量赋值,而且多个String引用指向同一个字面量时,在堆内存当中只有一个Java对象。如果调用String的构造函数给String类型的引用赋值,那么每调用一次构造函数,在堆内存当中就会生成一个String对象。所以如果s1s2都是同一个字面量赋值,那么无论是用==比较,还是用equals函数比较,都会返回true。如果s1s2都是使用构造函数生成的对象,并且传入构造函数参数的字面量相等,那么用==比较会返回false,用equals比较就会返回true

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值