==和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);}}
?