`String.equals`和`==`有什么区别?| Java Debug 笔记

本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看<活动链接>

提问:String.equals==有什么区别?

下面这段代码我使用==判断两个字符串是否相同,但结果为何是false呢?

public static void main(String...aArguments) throws IOException {

    String usuario = "Jorman";
    String password = "14988611";

    String strDatos = "Jorman 14988611";
    StringTokenizer tokens = new StringTokenizer(strDatos, " ");
    int nDatos = tokens.countTokens();
    String[] datos = new String[nDatos];
    int i = 0;

    while (tokens.hasMoreTokens()) {
        String str = tokens.nextToken();
        datos[i] = str;
        i++;
    }

    //System.out.println (usuario);

    if ((datos[0] == usuario)) {
        System.out.println("WORKING");
    }
}
复制代码

回答一

使用
String.equals(Object other)方法比较字符串,而不是使用==运算符。

equals()方法检查字符串的实际内容,==运算符检查对象的引用是否相等。要注意字符串常量的内存地址通常是相同的,这两个具有相同值的常量实际上可以用==进行比较,但最好不要依赖于此

if (usuario.equals(datos[0])) {
    ...
}
复制代码

注意:比较的主体是usuario,因为这个值是非空的,但是你仍然需要检查一下datos数组是否一定包含元素,否则你将得到一个数组越界异常。

回答二

equals()函数是Object类的方法,每个类都能重写它。String类重写了这个方法用来检查字符串是否相等,即在内容上而非在引用上相等。

==运算符检查两个对象的引用是否相同。

观察下面的代码:

String abc = "Awesome" ;
String xyz =  abc;

if(abc == xyz)
     System.out.println("Refers to same string");
复制代码

这里的变量abcxyz都是指同一个字符串Awesome,因此表达式abc==xyz为真。

String abc = "Hello World";
String xyz = "Hello World";

if(abc == xyz)
    System.out.println("Refers to same string");
else
    System.out.println("Refers to different strings");

if(abc.equals(xyz))
     System.out.prinln("Contents of both strings are same");
else
     System.out.prinln("Contents of strings are different");
复制代码

这里的abcxyz是两个不同的字符串,虽然内容是相同的Hello World。因此这里的表达式(abc==xyz)false,而abc.equals(xyz)true,希望你理解==<Object>.equals()之间的区别。

文章翻译自Stack Overflow:stackoverflow.com/questions/7…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享