`
zwt2001267
  • 浏览: 434802 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

== 和 equals

    博客分类:
  • Java
阅读更多

== 和 equals 操作比较:

测试代码:

package test;

public class Test implements Cloneable {

	public static void main(String[] args) throws Exception {
		Test a1 = new Test();
		Test a2 = new Test();
		Test a3 = a1;
		Test a4 = (Test) a1.clone();

		Class<?> clazz = Class.forName("test.Test");
		Test a5 = (Test) clazz.newInstance();

		String b1 = "abc";
		String b2 = "abc";

		String b11 = new String("a");
		String b12 = new String("a");

		Integer c1 = 123;
		Integer c2 = 123;

		Integer c11 = new Integer(11);
		Integer c12 = new Integer(11);

		System.out.println("===========Object:==============");
		System.out.println(a1 == a2);
		System.out.println(a1.equals(a2));
		System.out.println(a1 == a3);
		System.out.println(a1 == a4);
		System.out.println(a1.equals(a4));
		System.out.println(a1 == a5);
		System.out.println(a1.equals(a5));

		System.out.println("==============String:==============");
		System.out.println(b1 == b2);
		System.out.println(b1.equals(b2));

		System.out.println("==============new String:==============");
		System.out.println(b11 == b12);
		System.out.println(b11.equals(b12));

		System.out.println("==============Integer:==============");
		System.out.println(c1 == c2);
		System.out.println(c1.equals(c2));

		System.out.println("==============new Integer:==============");
		System.out.println(c11 == c12);
		System.out.println(c11.equals(c12));
	}
}

 

测试结果:

===========Object:==============

false

false

true

false

false

false

false

==============String:==============

true

true

==============new String:==============

false

true

==============Integer:==============

true

true

==============new Integer:==============

false

true

 

JDK7中相关源码:

 Object中equals方法:

    public boolean equals(Object obj) {
        return (this == obj);
    }
 从源码中可以看出,equals在比较Ojbect时与==操作结果相同。
 
Integer中equals方法:

 

    public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }
 
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;
    }

 

结论:

==操作:

1.基本类型和String:比较的是值

2.Object: 比较是否指向同一对象

 

equals操作:

1.String & Object:比较的是值是否相同

 

使用new 关键字后,jvm会分配资源创建新的对象。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics