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了






相关文章:

  • 2021-10-26
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-22
  • 2022-12-23
  • 2021-09-24
  • 2021-12-26
猜你喜欢
  • 2021-10-09
  • 2022-12-23
  • 2022-01-07
  • 2022-12-23
  • 2021-06-06
相关资源
相似解决方案