美文网首页互联网科技JavaJava 杂谈
如何在JAVA中比较两个String对象

如何在JAVA中比较两个String对象

作者: Java高级架构狮 | 来源:发表于2019-07-24 21:06 被阅读2次

问题

最近写程序的时候,遇到了需要比较两个 String 对象是否相等的情况,我习惯性的写了形如if(a == "a"){}的语句,IDEA 跳出警告,内容如下:

String values are compared using '==', not 'equals()'.

也就是说我刚刚那句话应该写成if(a.equals("a")){}才对,果然不再标红了。

说明

那么,为什么会这样呢?==equals()分别是什么效果呢?

对于基本数据类型byte(字节型)、short(短整型)、int(整型)、long(长整型)、float(单精度浮点型)、double(双精度浮点型)、boolean(布尔型)、char(字符型),==比较的就是他们的值,也不存在equals()方法。

而对于String这样的引用数据类型,==比较的是两个对象的 引用地址 即内存地址是否相同,如果内存地址相同,自然就是同一个对象了,同一个对象之间有啥好比的。

我们一般的应用场景主要是要比较两个 String 对象的内容,那就需要使用 equals() 方法。我们可以看一下 java.lang.String 中 equals() 方法的定义,可以看到 equals() 才是在比较两个 String 对象的值。

/**
* Compares this string to the specified object.  The result is {@code
* true} if and only if the argument is not {@code null} and is a {@code
* String} object that represents the same sequence of characters as this
* object.
*
* @param  anObject
*         The object to compare this {@code String} against
*
* @return  {@code true} if the given object represents a {@code String}
*          equivalent to this string, {@code false} otherwise
*
* @see  #compareTo(String)
* @see  #equalsIgnoreCase(String)
*/
public Boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

还有一个特例的情况,比如"abcde" == "abcde"或是"abcde" == "abc" + "de"都是会返回true的,因为双方都是由编译器直接实现的,没有被声明为变量。

小结

当然,如果你知道自己在做什么,就是要利用 == 的这个特性,自然是没有问题的。其他时候用 equals() 方法即可。

Java高级架构狮:专注于Java开发技术的研究与知识分享!

————END————

  • 点赞(感谢)
  • ...
  • 转发(感谢)
  • ...
  • 关注(感谢)
  • ...

相关文章

  • 比较

    java中,==号在比较基本数据类型时比较的是值,比较两个对象时比较的是两个对象的地址值 String类中的equ...

  • 如何在JAVA中比较两个String对象

    问题 最近写程序的时候,遇到了需要比较两个 String 对象是否相等的情况,我习惯性的写了形如if(a == "...

  • Python 中 is 和== 的区别

    初学python的时候,发现python中== 用来比较两个string的值,之前用java的话,比较string...

  • 2016.6.12

    ruby的equal是比较两个对象是否相同,而java里String类的equal方法比较两个字符串对象的值是否相...

  • java22(String,StringBuffer与Strin

    String(字符串): 在 Java 中String属于对象,Java提供了String类来创建和操作字符...

  • My Coding Notes

    String 1. Java中String判断相等时equals与==的区别 equals :两个字符串对象所存放...

  • String非空判断

    Dart 里的 String是不可变对象;要检测两个 String 的内容是否一样时,我们使用 == 进行比较;如...

  • Java基础 String的增删改查

    Java String 类为java的字符串;在 Java 中字符串属于对象,Java 提供了 String 类来...

  • Java 中的 String Pool 简介

    在 Java 中String对象是我们最常用的对象。 在本文章中,我们主要对 String 对象使用的 Strin...

  • 日常记忆之Java String类

    Java String类 字符串广泛应用在Java编程中,在Java中字符串属于对象,Java提供了String类...

网友评论

    本文标题:如何在JAVA中比较两个String对象

    本文链接:https://www.haomeiwen.com/subject/rqafrctx.html