其他分享
首页 > 其他分享> > equals 与 == 区分

equals 与 == 区分

作者:互联网

1.对于==:

基本数据类型:byte,short,char,int,long,float,double,boolean。
基本数据类型之间的比较,对于==,比较的是他们存储的“值”是否相等。

引用数据类型:类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型。
作用于引用类型的变量,对于==,比较的是两个变量所指向的对象的地址是否相等。

注:
  堆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中(new 出来的对象)。
  堆:存放用new产生的数据

2.对于equlas:

注意:equals方法不能作用于基本数据类型的变量。
equals方法继承Object类,比较两者是否是同一个对象。
1.如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
2.如果,对equals方法进行了重写的话,例如String、Date等类,则比较的是两个对象的内容是否相同。

equals源码:

public boolean equals(Object obj) {
        return (this == obj);
 }

String类中equals()源码:

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;
 }

Demo:

public class Demo {
    public static void main(String args[]) {
        String str1 = "Hello";
        String str11 = "hello";
        String str2 = new String("Hello");
        String str22 = new String("Hello");
        String str3 = str2; // 引用传递
        System.out.println(str1 == str11); // false
        System.out.println(str1 == str2);  // false
        System.out.println(str1 == str3);  // false
        System.out.println(str2 == str22); // false
        System.out.println(str2 == str3);  // true
        System.out.println(str1.equals(str2)); // true
        System.out.println(str1.equals(str3)); // true
        System.out.println(str2.equals(str3)); // true
    }
}

 

标签:String,str2,区分,System,equals,println,out
来源: https://www.cnblogs.com/pfzhang18/p/16098961.html