标签:
	/**
		 * String s1 = "a";
		 * 编译器会先检查常量池中是否已经有"a":
		 * 如果没有,则在常量池先创建,后引用.
		 * 如果有,则直接引用;
		 * 所以执行该语句,会产生0个或1个对象.
		 * 这里,会创建1个对象.
		 */
		String s1 = "a";
		/**
		 * String s2 = new String("a");
		 * 编译器先在堆中创建一个对象,然后去常量池中检查是否已有"a":
		 * 如果没有,则先在常量池创建,然后将堆中的引用指向常量池的对象;
		 * 如果有,则直接将堆中的引用指向常量池中的对象;
		 * 所以执行该语句,会产生1个或2个对象.
		 * 这里,会创建1个对象.
		 */
		String s2 = new String("a");
		System.out.println(s1==s2);	//false
以上代码,在jvm简单内存图可简述为:

而以上==比较的会是对象的地址,所以结果为false
标签:
原文地址:http://www.cnblogs.com/listened/p/4308431.html