Java String ==和equals()方法

今天遇到一个判断String内容是否相等的场景 开始用的==发现有问题之后改用equals 查了下两者区别 在这记录下

==操作符

1、对于基本数据类型 ==可判断两者是否相等 此时比较的是值
2、对于非基本类型 其用于判断两者是否引用同一地址 此时比较的是地址

equals方法

先看下String 重写的equals方法:

 public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = length();
            if (n == anotherString.length()) {
                int i = 0;
                while (n-- != 0) {
                    if (charAt(i) != anotherString.charAt(i))
                            return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

由此我们可以知道String的equals方法是比较的两字符串的内容

总结

根据自己的需求使用 如果是基本数据类型则使用= = 如果是非基本数据类型 比较对象是否相等用 = =, 比较对象内容是否相同用equals

补充

关于String一些知识的补充

String s1 = "Hello";
String s2 = "Hello";
 
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));

结果:true true

如果String不是通过new关键字来创建的,虚拟机就不会为这两个String对象分配新的内存堆,而是到String缓冲池中来寻找。所以s1和s2实际上是指向同一块内存地址

String s1 = new String("Hello");
String s2 = new String("Hello");
 
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));

结果:false true

String通过new关键字分别创建了一个新的String对象,new关键字为创建的每个对象分配一块新的、独立的内存堆。所以s1和s2是两个对象 其地址不同 但是连个对象的内容相同

猜你喜欢

转载自blog.csdn.net/Robin132929/article/details/89353883