字符串pool 引用相加和字面量相加

	public static final String AB = "ab";
	public static final String C = "c";

	public static void main(String[] args) {
		String s1 = "abc";
		
		String s2 = "ab";
		String s3 = "c";
		
		System.out.println(s1 == (s2+s3));
		System.out.println(s1 == (AB+C));
		System.out.println(s1 == ("ab"+"c"));
	}

开始我以为三个都是输出 true,然而,运行后却是
false
true
true

第十行所比较的不是同一个内存指向!


找了些资料,原来字符串在做“+”操作,

如果是字面量(“abc”这样,或者static final 修饰的字符串)那“+”号两边比较的字符串都是pool中的字符串;

如果“+”两边有一边不是字面量,那比较的字符串一个是pool中的一个是堆中的,这样比较内存指向的话,显然是false了






posted @ 2017-06-06 16:15  Bug开发攻城狮  阅读(195)  评论(0编辑  收藏  举报