当前位置: 首页 > 后端技术 > Java

Java中对String对象的引用

时间:2023-04-01 14:46:16 Java

1.创建由字面量创建的String对象与新建String对象不同。字面量创建的对象在常量池中,new创建的对象在堆中。//String对象//直接用引号创建的String对象在池中Strings1="abc";字符串s2="abc";System.out.println(s1==s2);//trues2是从池中直接取出“abc”对象的引用//new创建的String对象在堆中Strings3=newString("abc");Strings4=newString("abc");System.out.println(s3==s4);//false两个对象都在堆中,地址不同//堆中的对象和池中的对象不一样System.out.println(s2==s3);//false2,intern()方法官方解释:民间解释:执行intern方法时,如果池中已经存在与当前对象相同的字符串,则返回池中的那个,否则,当前对象将被添加到池中并返回。返回值:与当前对象相同的字符串,但保证从具有唯一字符串的池中获取。字符串s5="abc";Strings6=newString("abc");System.out.println(s6.intern()==s5);//trues6.intern()取自pool3,直接拼接字符串会放入常量池,只会创建一个拼接对象。通过变量拼接,会调用StringBuilder的append方法进行拼接,返回对象为newString()。字符串s1="a";字符串s2="ab";字符串s3="a"+"b";字符串s4=s1+"b";System.out.println(s2==s3);//真系统.out.println(s2==s4);//错误System.out.println(s3==s4);//false4.问题:下面的代码创建了几个对象:Strings="a"+"b"+"c";//1在常量池中,编译时合并Strings=newString("abc");//2,一个在常量池,一个在堆