[@古散][¥20]为什么字符串的比较要用equals,而不用==号-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

黍离 2018-10-23 20:15:09 1184

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

分享到
取消 提交回答
全部回答(7)
  • 老离
    2019-07-17 23:09:49
    已采纳

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

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


    Ps:

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

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

    0 0
  • mqtq
    2020-02-12 11:49:30

    equals是比较两者的内容,而==是比较两者的地址

    0 0
  • 阿靖哦
    2019-07-17 23:09:49

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

    0 0
  • 谢杨易
    2019-07-17 23:09:49

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

    0 0
  • 太原周杰伦
    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";可以大大节省创建对象,内存分配和回收带来的性能损耗。

    1 0
  • 微wx笑
    2019-07-17 23:09:49

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

    0 0
滑动查看更多
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

推荐文章