开发者社区> 问答> 正文

[@古散][¥20]为什么字符串的比较要用equals,而不用==号

已解决

为何字符串比较的时候要用equals,而不用==

展开
收起
云计算之思 2018-10-23 20:15:09 3863 0
7 条回答
写回答
取消 提交回答
  • 互联网小站长、java程序员、运营爱好者,关心开源与喜欢的一切,喜欢总结写攻略,对产品设计有点兴趣......
    采纳回答

    对于引用数据类型(类、接口类型、数组类型、枚举类型、注解类型)来说,==和equals都是来比较两个变量的地址,String类重写了equals方法,所以可以比较两个字符串内容是否相等

    这里判断的是字符串是否匹配,所以需要用equals方法而非“==”


    Ps:

    1. equals()方法存在于Object类中, Object类中equals()方法底层依赖的是“==”,在所有没有重写equals()方法的类中,调用equals()方法其实和使用==号的效果一样,也就是比较的地址值。

    2.java中String类重写了equals方法,重写后的equals方法比较字符串是否完全匹配(稍后会附上源码截图)

    2019-07-17 23:09:49
    赞同 展开评论 打赏
  • equals是比较两者的内容,而==是比较两者的地址

    2020-02-12 11:49:30
    赞同 展开评论 打赏
  • JAVA开发工程师

    ==是比较两个的地址,equals是比较其中的内容

    2019-07-17 23:09:49
    赞同 展开评论 打赏
  • 乐分享爱学习,Android 前端 后端 AI等均有一些分享,一起学习,一起进步

    等号是引用比较,而不是字符串内容的比较。js中可以用等号

    2019-07-17 23:09:49
    赞同 展开评论 打赏
  • 首先明确==和equals的区别,==比较的是两个对象的地址,equals作为Object类的方法,如果没有被重写,那么也是比较的地址。对于字符串来说,在JVM内存中有一个字符串常量池,在创建字符串的时候会判断池中是否已经有了这个字符串,如果有则引用,如果没有则创建,并放入。

    清除了这个以后,对于String a = new String("a");String b = new String("a"); a==b 输出false的原因自然就清除了。因为a==b比较的是内存地址,而a和b都是创建的不同的对象的引用,所以a==b输出false。这种方式不建议使用,建议使用String a = "a";可以大大节省创建对象,内存分配和回收带来的性能损耗。

    2019-07-17 23:09:49
    赞同 1 展开评论 打赏
  • 无知人生,记录点滴。 不积跬步,无以至千里;不积小流,无以成江海 订阅号:微wx笑, 个人站点:https://www.ivu4e.cn/,https://www.ivu4e.com/ CSDN博客:https://blog.csdn.net/testcs_dn

    通常情况下字符串用==就够了。
    而其它类型反而不够,这要看JVM的实现原理。

    2019-07-17 23:09:49
    赞同 展开评论 打赏
  • 默认语言是Java,String a = new String(“a”);String b = new String(“a”);a和b没记错的话==比较返回false

    2019-07-17 23:09:49
    赞同 展开评论 打赏
滑动查看更多
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载