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