浅谈String.intern()

intern()函数是什么

new String都是在堆上创建字符串对象。当调用 intern() 方法时,编译器会将字符串添加到常量池中(stringTable维护),并返回指向该常量的引用。

下面直接看代码,进行展示

public class demo3 {
	public static void main(String[] args) {
		String s1="你好";
		String s2="之华";
		String s3="你好之华";
		System.out.println((s1+s2)==s3);	//false	
		System.out.println((s1+s2).intern()==s3);	//true	因为用了intern() 将常量区的地址给了(s1+s2)
		
		s1="你好"+"之华";
		System.out.println(s1==s3);		//true
		
		s1=new String("你")+new String("之");
		s1.intern();
		s2="你之";
		System.out.println(s1==s2);		//true
		
		String s4="你好";
		String s5=new String("你好");
		System.out.println(s4==s5);		//false
		
		s4="好";
		s5=new String("好").intern();
		System.out.println(s4==s5);		//true
		
		String s6=new String("你").intern();
		String s7=new String("你").intern();
		System.out.println(s6==s7);		//true
		
		s1="我";
		s2=new String("我");
		s2.intern();
		System.out.println(s1==s2);		//false 因为常量区已经有"我",所以用intern的时候不会再去创建
		
		final String s8="爱";
		String s9=s8+"你";		//因为final是常量,所以这句话会直接替换成String s9="爱"+"你";
		String s10="爱你";
		System.out.println(s10==s9);	//true
	}
}

总结:
1.“+”操作符,是直接进行字符串拼接,而 变量+“” 是调用的StringBuffer的append()方法在堆上创建的新对象
2.intern()是只有常量区没有的时候才会去创建,如果有了就不会创建
3.final修饰的常量,是会在编译阶段直接进行替换
4.String对象直接显示调用intern()方法也会在常量区创建对象

这个具体的掌握,还是需要自己实践一下,画一画图,就能明白了

猜你喜欢

转载自blog.csdn.net/qq_37871033/article/details/85326788