==跟equals比较

==和equals比较
package com.test;

public class StringTest {

	/**
	 * @param args运行期拼接动态字符串会产生大量临时变量
	 */
	public static void main(String[] args) {
		String s1 = "test";
		String s2 = "test";
		//test是存在栈内存的常量池中的,所以两个地址是一样的。
		System.out.println(s1.hashCode());
		System.out.println(s2.hashCode());
		System.out.println(s1.equals(s2));
		System.out.println(s1==s2);
		System.out.println("----------------------------");
		String ss1 = new String("test");
		String ss2 = new String("test");
		//这个new的String是放在堆内存中的,栈中只有指向他们的地址,这个地址是不同的。
		//所以==是false
		//但是String的equals方法还比较了值,如果值相同那么equals放回的是true,
		//所以比较两个String是否相等要用equals,如果比较两个对象是否引用同一个则用==;
		System.out.println(ss1.hashCode());
		System.out.println(ss2.hashCode());
		System.out.println(ss1.equals(ss2));
		System.out.println(ss1==ss2);
		System.out.println("----------------------------");
		
		Object o1 = new Object();
		Object o2 = new Object();
		System.out.println(o1.hashCode());
		System.out.println(o2.hashCode());
		System.out.println(o1.equals(o2));
		System.out.println(o1==o2);
		Double d1 = new Double(4);
		Double d2 = new Double(4);
		System.out.println(d1.hashCode());
		System.out.println(d2.hashCode());
		System.out.println(d1.equals(d2));
		System.out.println(d1==d2);
		System.out.println("----------------------------");
		Object oo1 = new Object();
		Object op2 = new Object();
		System.out.println(o1.hashCode());
		System.out.println(o2.hashCode());
		System.out.println(o1.equals(o2));
		System.out.println(o1==o2);
	}

}