java中“==”和“equals”区别详述

首先,在了解区别前要知道如何判断创建对象的个数。

String name0 = new String("Katty");//创建两个String类型的对象
	    
	    String name1 = "jim";//一个String类型的对象
	    
	    String name2 ="Ka"+"te";//一个String类型的对象。
	    
	    String str = "To";
	    String name3 = str+"mmy";//创建两个String类型的对象
	    
	    String letters = "a";
	    for(int i=1;i<3;i++) {
	      letters = "a"+letters;// i=1  aa  i=2 aaa
	    }//创建多少个String对象 :3个String类型

另从上面可以看出for循环中出现了3个对象,java中为了避免创建多个对象占据内存,有这样的方法来解决

StringBuffer sb = new StringBuffer("a");
	    for(int i=1;i<3;i++) {
	    	sb.append("a");
	    	
	    }
	    System.out.println(sb.toString());
	    System.out.println(sb.length());//返回字符个数
	    sb = new StringBuffer("asf");
	    System.out.println(sb.reverse());//反转

==的作用:基本数据类型比较的是数值是否相等;引用数据类型比较的是地址是否相同,不论哪种数据类型

 double a = 10.0;
	    int b = 10;
	    System.out.println(a==b);//不论是什么数据类型,可以不是一种,只比较数值。
	    
	    String str1 = "Jim";
	    String str2 = "Jim";
	    System.out.println(str1==str2);//比较地址

equals的作用:比较地址是否相同。
但String类重写了equals方法,用于比较俩个字符串是否相同。
这里我们需要分析 String中一段代码

public boolean equals(Object anObject) {//anObject变量存的是上转型对象地址
        if (this == anObject) {//比较地址是否相同
            return true;
        }
        if (anObject instanceof String) {//判断anObject变量所指向的对象是否是String类型
            String anotherString = (String)anObject;//将上转型对象下转型
            int n = value.length;//调用equals方法String对象每一个字符组成的char类型数组的长度。
            if (n == anotherString.value.length) {
                char v1[] = value;;//调用equals方法String对象每一个字符组成的char类型数组
                char v2[] = anotherString.value;//anObject所对应的字符串构成的char类型数组
                int i = 0;
                while (n-- != 0) {//对比每个字符
                    if (v1[i] != v2[i])//对应字符不同,则俩个字符一定不同
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

通过上面可以看出俩者的区别。

发布了28 篇原创文章 · 获赞 0 · 访问量 429

猜你喜欢

转载自blog.csdn.net/syhfly2333/article/details/104868623