java——==与equals

1、==
(1)基本数据类型比较的是值是否相等
(2)引用类型比较的是地址是否相等

package sun;

public class Test {

	public static void main(String[] args) {
		int a=2;
		int b=3;
		System.out.println(a==b);//基本数据类型
		
		String str1="Lucy";
		String str2="Lucy";
		System.out.println(str1==str2);//引用类型
	}
}

结果:
在这里插入图片描述

2、equals
(1)Object类中的equals方法比较的是地址是否相等

Object类的equals方法的源码如下:

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

(2)String类中重写了equals方法,String类中equals方法比较的是内容是否相等

例如:

package sun;

public class Test {

	public static void main(String[] args) {
		String name1="Tim";
	    String name2="Tim";
	    System.out.println(name1.equals(name2));//执行到第一步,返回true
	    
	    Test test = new Test();
	    System.out.println(name1.equals(test));//执行到第二步,返回false
	    
	    String name3=new String ("Tom");
	    System.out.println(name1.equals(name3));//执行到第三步,返回true
	}

}

String类的equals方法的源码如下:

public boolean equals(Object anObject) {
        if (this == anObject) { //第一步:比较调用这个equals方法的字符串和传给这个方法的参数(另一个字符串)的地址是否相等
            return true;
        }
        if (anObject instanceof String) {//第二步:判断传给这个方法的参数的类型是否是String型,是的话才进入下一步,否则直接返回false
            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;//如果每个都相等,返回true
            }
        }
        return false;
    }

发布了29 篇原创文章 · 获赞 3 · 访问量 371

猜你喜欢

转载自blog.csdn.net/qq_44687512/article/details/104905627