java虚拟机里有一个区域叫方法区,方法区里有一个常量区,如果你是String str = "abc",虚拟机认为“abc”是常量,放在常量区。下次你再定义String otherStr = “abc", 虚拟机并不新创建任何东西,而是连到刚才常量区里的”abc“,所以不管是equals()还是==,都相等,因为值和地址都相等。 
另外还有一个区域叫堆,如果String str = new String("abc"), 虚拟机会创建对象放到堆里,再String otherStr = new String("abc"),会在堆里放两个对象。所以==就是false,因为两个对象地址不同。
equals():比较两个对象所指向的内容是否相等。
==:比较两个对象引用的地址是否相等;
——————————————————————————
package Number;

class V{}

public class Test3{
	public static void main(String[] args){// Cannot make a static reference to the non-static field b
		String s1 = "abc";
		String s2 = "abc";
		String s3 = new String("abc");
		String s4 = new String("abc");
		V v1 = new V();
		V v2 = new V();
		System.out.println(s1.equals(s2));
		System.out.println(s1 == s2);
		System.out.println("*************");
		System.out.println(s3.equals(s4));
		System.out.println(s3 == s4);
		System.out.println("*************");
		System.out.println(v1.equals(v2));
		System.out.println(v1 == v2);

	}	
}